相关疑难解决方法(0)

在C#/ .NET中将参数标记为不可为空?

是否有一个简单的属性或数据契约,我可以分配给一个函数参数,以防止null在C#/ .NET中传递?理想情况下,这也会在编译时进行检查,以确保文本null在任何地方都没有被使用,并且在运行时抛出ArgumentNullException.

目前我写的东西像......

if (null == arg)
  throw new ArgumentNullException("arg");
Run Code Online (Sandbox Code Playgroud)

......对于我期望不存在的每一个论点null.

在同一个注释中,是否Nullable<>会出现以下情况:

NonNullable<string> s = null; // throw some kind of exception
Run Code Online (Sandbox Code Playgroud)

.net c# parameters null

90
推荐指数
4
解决办法
6万
查看次数

查找传递给函数的变量名称

让我用下面的例子来解释我的问题:

public string ExampleFunction(string Variable) {
    return something;
}

string WhatIsMyName = "Hello World"';
string Hello = ExampleFunction(WhatIsMyName);
Run Code Online (Sandbox Code Playgroud)

当我将变量"WhatIsMyName"传递给示例函数时,我希望能够获取原始变量名称的字符串.也许是这样的:

Variable.OriginalName.ToString()
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

c#

60
推荐指数
9
解决办法
5万
查看次数

创建以"对象"类型操作的扩展方法是否会影响性能?

我有一组扩展方法,我经常用于各种UI任务.我通常将它们定义为运行类型object,即使在它们内部我通常将它们转换为字符串类型.

public static string FormatSomething(this object o)
{
     if( o != null )
     {
          string s = o.ToString();
          /// do the work and return something.
     }
     // return something else or empty string.

}
Run Code Online (Sandbox Code Playgroud)

我使用类型object而不是使用类型的主要原因string<%#Eval("Phone").ToString().FormatSomething()%>在我可以做的时候将自己保存在UI中<%#Eval("Phone").FormatSomething()%>.

那么,从性能的角度来看,创建所有扩展方法是否正常object,或者我应该根据扩展方法的作用将它们转换为string(或相关)类型?

c# extension-methods

27
推荐指数
1
解决办法
7146
查看次数

在运行时解析参数名称

可能重复:
查找传递给C#中函数的变量名称

在C#中,有没有办法(更好的方法)在运行时解析参数的名称?

例如,在以下方法中,如果重命名方法参数,则还必须记住更新传递给ArgumentNullException的字符串文字.

    public void Woof(object resource)
    {
        if (resource == null)
        {
            throw new ArgumentNullException("resource");
        }

        // ..
    }
Run Code Online (Sandbox Code Playgroud)

c# reflection anonymous-types

20
推荐指数
3
解决办法
1万
查看次数

ArgumentNullException - 如何简化?

我注意到这个代码在我的构造函数中出现了很多:

if (someParam == null) throw new ArgumentNullException("someParam");
if (someOtherParam == null) throw new ArgumentNullException("someOtherParam");
...
Run Code Online (Sandbox Code Playgroud)

我有一些构造函数,其中注入了几个东西,并且必须都是非null.谁能想到一种简化这种方法的方法?我唯一能想到的是以下几点:

public static class ExceptionHelpers
{
   public static void CheckAndThrowArgNullEx(IEnumerable<KeyValuePair<string, object>> parameters)
   {
      foreach(var parameter in parameters)
         if(parameter.Value == null) throw new ArgumentNullException(parameter.Key);
   }
}
Run Code Online (Sandbox Code Playgroud)

但是,使用它会是这样的:

ExceptionHelper.CheckAndThrowArgNullEx(new [] {
    new KeyValuePair<string, object>("someParam", someParam),
    new KeyValuePair<string, object>("someOtherParam", someOtherParam),
    ... });
Run Code Online (Sandbox Code Playgroud)

...这并没有真正帮助简化代码.Tuple.Create()而不是KVP不起作用,因为Tuple的GTP不协变(即使IEnumerable的GTP是).有任何想法吗?

c# exception

16
推荐指数
6
解决办法
1万
查看次数