簡體   English   中英

檢查params object []中的對象是否可為空<T>

[英]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值成為基礎類型。 無法在中區分o1o2

object o1 = 100;
object o2 = new int?(100);

我不確定您要做什么,所以我只能說明問題所在,不能提出其他建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM