gri*_*eve 5 c# generics nullable
基本上我想要以下通用功能:
public string StringOrNull<T> (T value)
{
if (value != null)
{
return value.ToString();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用约束,例如T:class,但T可以是基本类型,Nullable <>或类.有没有通用的方法来做到这一点?
编辑
结果我跳了枪.这实际上工作得很好,如下例所示:
class Program
{
static void Main(string[] args)
{
int i = 7;
Nullable<int> n_i = 7;
Nullable<int> n_i_asNull = null;
String foo = "foo";
String bar = null;
Console.WriteLine(StringOrNull(i));
Console.WriteLine(StringOrNull(n_i));
Console.WriteLine(StringOrNull(n_i_asNull));
Console.WriteLine(StringOrNull(foo));
Console.WriteLine(StringOrNull(bar));
}
static private string StringOrNull<T>(T value)
{
if (value != null)
{
return value.ToString();
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个有趣的:
public static class ExtensionFunctions{
public static string ToStringOrNull( this object target ) {
return target != null ? target.ToString() : null;
}
}
Run Code Online (Sandbox Code Playgroud)
最酷的部分?这将起作用:
( (string) null ).ToStringOrNull();
Run Code Online (Sandbox Code Playgroud)
这也是如此:
5.ToStringOrNull();
Run Code Online (Sandbox Code Playgroud)
扩展函数非常棒……它们甚至可以作用于空对象!
如果您传递原始类型,它将自动装箱,因此您无需担心比较null
。由于装箱是自动发生的,您甚至可以显式地比较 与 而int
不会null
出现错误,但结果将始终是false
(并且您可能会收到编译器警告告诉您这一点)。
归档时间: |
|
查看次数: |
1079 次 |
最近记录: |