簡體   English   中英

使用泛型返回擴展方法

[英]Extension method return using generics

是否可以使用 擴展方法返回 泛型類型?

例如,我有以下方法:

// Convenience method to obtain a field within a row (as a double type) 
public static double GetDouble(this DataRow row, string field) {
    if (row != null && row.Table.Columns.Contains(field))
    {
        object value = row[field];
        if (value != null && value != DBNull.Value)
            return Convert.ToDouble(value);
    }
    return 0;
}

目前使用如下:

double value = row.GetDouble("tangible-equity");

但我想使用以下代碼:

double value = row.Get<double>("tangible-equity");

這可能嗎?如果可能,該方法會是什么樣子?

這個怎么樣:

    public static T Get<T>(this DataRow row, string field) where T: IConvertible 
    {
        if (row != null && row.Table.Columns.Contains(field))
        {
            object value = row[field];
            if (value != null && value != DBNull.Value)
                return (T)Convert.ChangeType(value, typeof(T));
        }
        return default(T);
    }

Convert.ChangeType處理轉換要靈活得多,而不僅僅是強制轉換。 這幾乎反映了您的原始代碼,只是通用的。

這是可能的。 它可能類似於以下內容:

// Convenience method to obtain a field within a row (as a T type) 
public static T Get<T>(this DataRow row, string field) {
    if (row != null && row.Table.Columns.Contains(field))
    {
        object value = row[field];
        if (value != null && value != DBNull.Value)
            return (T)value;
    }
    return default(T);
}

DataRow 有一個名為Field的擴展方法,它可以做很多你想做的事情。 我不確定它會如何處理 double 上的空值(我知道它會處理可空類型)。 這可能不是您正在尋找的內容,但值得一看。

double value = row.Field<double>("tangible-equity");

暫無
暫無

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

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