[英]Check if an object in params object[] is Nullable<T>
using System;
using System.IO;
class Program
{
static bool IsNullable<T>(T t)
{
return false;
}
static bool IsNullable<T>(T? t) where T : struct
{
return true;
}
static void Test(params object[] objs)
{
for (int iter = 0, limit = objs.Length; iter < limit; ++iter)
{
var obj = objs[iter];
Console.WriteLine("{0}: {1}", iter, IsNullable(obj) ? "yes" : "no");
}
}
static void Main(string[] args)
{
Test(new int?(100));
}
}
我將一些數字作為nullables
傳遞給函數,因此如果添加到DB,則將它們替換為null
如果為0
。 我認為這是一種無需創建新數據類型的簡單而有意義的方法。 但是...它不起作用。
因此,我正在嘗試測試objs
是否為Nullable
類型。 能做到嗎? 如果進入params object[]
,則Nullable<T>
會轉換為T
我肯定會使用自定義數據類型,但是為什么它不能按我認為的那樣工作?
PS : 我對C#
非常陌生。
有兩個問題。
首先是,除了dynamic
(您未使用)之外,所有其他方法調用都在編譯時解決。 您對IsNullable(obj)
調用將始終調用IsNullable<object>
版本,因為obj
的靜態類型只是object
。
第二點是可空類型具有特殊的裝箱規則(轉換為object
): null
成為真正的null引用,非null值成為基礎類型。 無法在中區分o1
和o2
object o1 = 100;
object o2 = new int?(100);
我不確定您要做什么,所以我只能說明問題所在,不能提出其他建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.