以下代码编译:
class Testing<TKey, TValue>
{
public bool Test(TKey key)
{
return key == null;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,TKey可以是值类型,并且可能不允许值"null".
我知道这个程序的结果,以及如何添加约束.我想知道为什么当TKey不被约束为"类"时,编译器不会禁止这个?
我从这篇文章中了解到C#中的值类型不是对象.也就是说,它们不会从System.Object继承.
假设我的逻辑到目前为止,是可以为空的类型,例如int ?,对象.他们是从Object继承的吗?
如果是这样,它们是否受到与其他对象相同的规则和约束,或者是否存在管理其行为的特殊规则?
作为参考,这个问题来自对null coalesce运算符的工作的调查.
推荐哪一个用于检查Object null-ness?
null != Object
Run Code Online (Sandbox Code Playgroud)
要么
Object != null
Run Code Online (Sandbox Code Playgroud)
和其他方式
null == Object
Run Code Online (Sandbox Code Playgroud)
要么
Object == null
Run Code Online (Sandbox Code Playgroud)
......他们之间有什么区别吗?
所以我在c#中创建了一个自定义的int.tryparse方法,试图让事情变得更简单,更清晰.这是方法:
public static int? BoolIntParse(string number)
{
int temp;
if (int.TryParse(number, out temp))
return temp;
else
return null;
}
Run Code Online (Sandbox Code Playgroud)
现在,我想尝试以这种方式使用它:
if(int? someNumber = BoolIntParse(someString))
{
//do some stuff if its a number
}
else
//throw some error
Run Code Online (Sandbox Code Playgroud)
哪个似乎不起作用.我也尝试在condtional之前分配值,例如:
int? someNumber = BoolIntParse(someString);
if(someNumber)
{
//do some stuff if its a number
}
else
//throw some error
Run Code Online (Sandbox Code Playgroud)
我收到错误消息 Cannot implicitely convert type int? to bool
所以这不是合法的c#.这是一个nullible int是为(这种情况)设计的,还是我没有正确地做到这一点?我对c#比较新.
是否可以Nullable<>.HasValue在引用类型上使用?
假设我们从值类型中得到了这个例子:
int? a = GetNullOrValue(); // completely randomly gets random number or null
if (a.HasValue) return 0;
Run Code Online (Sandbox Code Playgroud)
我想要完成的是:
class Foo
{
public string Bar { get; set; }
}
Foo foo = GetNullOrFoo(); // completely randomly gets Foo ref. or null
if (foo.HasValue) return foo.Bar; // of course this will throw NullReferenceException if foo is null
Run Code Online (Sandbox Code Playgroud)
我希望实现这一点以获得更好的可读性,因为我更喜欢"单词内容",而不是"符号内容"(x.HasValue而不是x != null).
有什么区别Nullable.Value和(<whatEverType>) Nullable?据我所知,如果未设置值或值本身,则两个方法都返回NULL.
例如:
DateTime? date = DateTime.Now;
DateTime now = (DateTime) date;
DateTime now2 = date.Value;
Run Code Online (Sandbox Code Playgroud) 我想要一个包含可空Ts的列表的通用类(在类型T中).
class MyClass<T>
{
List<T?> myNullableList;
}
Run Code Online (Sandbox Code Playgroud)
无法编译时出现以下错误.
错误CS0453:类型`T'必须是非可空值类型才能在泛型类型或方法`System.Nullable'中将其用作类型参数`T'
我究竟做错了什么?
[HttpGet]
public ActionResult Login(string? returnUrl)
{
if (Request.IsAuthenticated)
{
if(returnUrl.HasValue)
return RedirectToAction("Index", "Home");
else
return RedirectToAction(returnUrl);
}
return View();
}
Run Code Online (Sandbox Code Playgroud)

错误:'System.Web.Mbv.Controller.Redirect(string)'的最佳重载方法匹配有一些无效的参数
如何使用可空字符串 RedirectToAction()
为什么下面的行编译?对我来说,Nullable<double>是一个结构,我们不能为这种类型的变量赋值"null".
Nullable<double> someVar = null;
Run Code Online (Sandbox Code Playgroud)
赋值运算符不应该是可覆盖的,但可能是一些语法糖,编译器知道它必须将其更改为?
Nullable<double> someVar = new Nullable<double>();
someVar.Value = null;
Run Code Online (Sandbox Code Playgroud)