none
函数参数范围检验 RRS feed

  • 问题

  • 我记得以前在哪儿看到过一个介绍,说某个版本的VS(可能是FRAMEWORK)支持参数的范围检查。

    如void f(int arg),可以用某种方式标记参数范围,如调用时必须满足arg>0。我当时还觉得这个功能非常不错。但是现在找来找去也找不到。

    请问是否有这样的功能?

    2013年10月23日 4:12

答案

  • 不确定。你大概说的是DataAnnociation吧?(RangeAttribute),用于属性上,结合MVC以及Dynamic Data等项目中直接使用。

    至于函数功能,我估计你只能自己写了,参考我的示例代码:

    using System;
    using System.Reflection;
    
    namespace MultiCore
    {
        /// <summary>
        /// 仅仅对参数起作用验证
        /// </summary>
        [AttributeUsage(AttributeTargets.Parameter)]
        class RangeAttribute:Attribute
        {
            public int MaxValue { get; set; }
            public int MinValue { get; set; }
        }
    
        class MainTest
        {
            /// <summary>
            /// 自定义测试函数,判断传递参数
            /// </summary>
            /// <param name="value">传入测试的数值</param>
           public void Input([Range(MaxValue=10,MinValue=1)]int value)
            {
                RangeAttribute attr =(RangeAttribute)MethodBase.GetCurrentMethod().GetParameters()[0].GetCustomAttribute(typeof(RangeAttribute));
    
               if(value>attr.MaxValue||value<attr.MinValue)
               {
                   throw new Exception("参数范围错误!");
               }
    
                Console.WriteLine(value);
            }
            static void Main(string[] args)
            {
                MainTest mt = new MainTest();
                mt.Input(11);
            }
        }
    }

    当然你完全可以改用if来完成。同时可以封装我的示例代码方法到其它公用的类库中调用判断即可。


    Click For donating:Free Rice For the poor
    For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
    For more things to talk about? StackOverFlow is your choice.

    • 已标记为答案 Jeuo 2013年10月24日 6:02
    2013年10月23日 4:50
    版主

全部回复

  • 不确定。你大概说的是DataAnnociation吧?(RangeAttribute),用于属性上,结合MVC以及Dynamic Data等项目中直接使用。

    至于函数功能,我估计你只能自己写了,参考我的示例代码:

    using System;
    using System.Reflection;
    
    namespace MultiCore
    {
        /// <summary>
        /// 仅仅对参数起作用验证
        /// </summary>
        [AttributeUsage(AttributeTargets.Parameter)]
        class RangeAttribute:Attribute
        {
            public int MaxValue { get; set; }
            public int MinValue { get; set; }
        }
    
        class MainTest
        {
            /// <summary>
            /// 自定义测试函数,判断传递参数
            /// </summary>
            /// <param name="value">传入测试的数值</param>
           public void Input([Range(MaxValue=10,MinValue=1)]int value)
            {
                RangeAttribute attr =(RangeAttribute)MethodBase.GetCurrentMethod().GetParameters()[0].GetCustomAttribute(typeof(RangeAttribute));
    
               if(value>attr.MaxValue||value<attr.MinValue)
               {
                   throw new Exception("参数范围错误!");
               }
    
                Console.WriteLine(value);
            }
            static void Main(string[] args)
            {
                MainTest mt = new MainTest();
                mt.Input(11);
            }
        }
    }

    当然你完全可以改用if来完成。同时可以封装我的示例代码方法到其它公用的类库中调用判断即可。


    Click For donating:Free Rice For the poor
    For spamming-sender issues, you can either report it at Microsoft Spamming Issue, or just find "Report Spam Here+Number" at Forum Issue;You can also find "Verify Your Account+Number" at "Forum Issue", where you can submit to be confirmed to paste links or images.
    For more things to talk about? StackOverFlow is your choice.

    • 已标记为答案 Jeuo 2013年10月24日 6:02
    2013年10月23日 4:50
    版主
  • 你好:

    最好就是在方法的内部进行判断。你可以参考一下这篇帖子的讨论:

    http://bbs.csdn.net/topics/370150975


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年10月24日 5:15
    版主