用反射的大虾进来帮忙看一下

lovelan1748 2010-09-17 03:37:02
比如我有这么一个方法

private void GetString(int value){
}

现在想控制参数的范围,让value>0,否者编译不过,就是类似ObsoleteAttribute的用法
如果没有这种特性,能不能通过反射自己实现这个功能,考虑到参数是运行时产生,可能比较麻烦,求思路
...全文
247 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovelan1748 2010-09-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wangtaiping 的回复:]
哥 你回头看看编译原理 编译的过程中函数使怎么被编译的 参数又是咋个处理的。。。
[/Quote]
呃,我暂时放弃吧,结贴了
  • 打赏
  • 举报
回复
警告。。。那你要自己写个IDE了。。
wangtaiping 2010-09-17
  • 打赏
  • 举报
回复
哥 你回头看看编译原理 编译的过程中函数使怎么被编译的 参数又是咋个处理的。。。
lovelan1748 2010-09-17
  • 打赏
  • 举报
回复
也不是说要编译不过,就是说警告窗口里有信息也行
danjiewu 2010-09-17
  • 打赏
  • 举报
回复
参数是调用的时候赋的,编译器怎么知道会赋什么参数?编译器再牛B也不可能未卜先知啊
wangtaiping 2010-09-17
  • 打赏
  • 举报
回复
这个检测最好再调用时检测吧

if (value >1)
{
GetString(value);
}
lovelan1748 2010-09-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wuyazhe 的回复:]
那如果

C# code

for(int i=-1;i<10;i++)
{
GetString(i);
}


这个能编译通过么?

或是

C# code
int n = int.Parse(Console.ReadLine());
int m = int.Parse(Console.ReadLine());
for(int i=n;i<m;i++)
……
[/Quote]

那个。。。不好意思,没太看懂你想说什么,当然是可以编译通过的
lovelan1748 2010-09-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wuyazhe 的回复:]
编译器不是替你执行代码的,而数字是否符合规则也并不是编译器能判断的。必然运行时判断。
[/Quote]
3Q,所以我才提问的时候说参数比较麻烦,如果能这么做就最好了
lovelan1748 2010-09-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gomoku 的回复:]
你也知道编译期和运行期的差别。
那编译期还不知道的情况怎么可能编译报错呢?
[/Quote]
但是使用Obsolete特性在编译时提示警告是什么原理呢
兔子-顾问 2010-09-17
  • 打赏
  • 举报
回复
编译器不是替你执行代码的,而数字是否符合规则也并不是编译器能判断的。必然运行时判断。
gomoku 2010-09-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lovelan1748 的回复:]
ObsoleteAttribute
这个应该是在编译时起作用吧

其实说白了就是编译报错,我不想在调用的时候抛出异常
[/Quote]
你也知道编译期和运行期的差别。
编译期还不知道的情况怎么可能编译报错呢?
兔子-顾问 2010-09-17
  • 打赏
  • 举报
回复
那如果

for(int i=-1;i<10;i++)
{
GetString(i);
}

这个能编译通过么?

或是
int n = int.Parse(Console.ReadLine());
int m = int.Parse(Console.ReadLine());
for(int i=n;i<m;i++)
{
GetString(i);
}

这个能编译通过么?
lovelan1748 2010-09-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dattotzy 的回复:]
"编译不过" ???

是在编译时候,还是运行时??? 如果运行时,只需要对值进行判断即可。如果非运行时,而是设计时,那么反射也没用吧。
[/Quote]
虽然是连骗带蒙得的分,怎么也快升星了的说
lovelan1748 2010-09-17
  • 打赏
  • 举报
回复
ObsoleteAttribute
这个应该是在编译时起作用吧

其实说白了就是编译报错,我不想在调用的时候抛出异常
小范f-li.cn 2010-09-17
  • 打赏
  • 举报
回复
        private void GetString(int value)
{
if (value < 1)
{
throw new ArgumentOutOfRangeException();
}
//...
}
酋长 2010-09-17
  • 打赏
  • 举报
回复
"编译不过" ???

是在编译时候,还是运行时??? 如果运行时,只需要对值进行判断即可。如果非运行时,而是设计时,那么反射也没用吧。
gomoku 2010-09-17
  • 打赏
  • 举报
回复

private void GetString(int value)
{
if( value < 0 ) throw new ArgumentException("...");
}

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧