Tuesday, March 15, 2011

Returning null value from generic method

So i have this method:

    internal K GetValue<T, K>(T source, string col) where T : IBaseObject
    {
        string table = GetObjectTableName(source.GetType());
        DataTable dt = _mbx.Tables[table];
        DataRow[] rows = dt.Select("ID = " + source.ID);
        if (rows.Length == 0) return K;

        return (K) rows[0][col];
    }

I want to be able to return a null, or some kind of empty value, if no rows are found. What's the correct syntax to do this?

From stackoverflow
  • You could return default(K), and that means you will return null if K is a reference type, or 0 for int, '\0' for char, and so on...

    Then you can easily verify if that was returned:

    if (object.Equals(resultValue, default(K)))
    {
        //...
    }
    
  • You could return default(K).

  • You have to use the class generic constraint on the K type parameter (because classes - as opposed to structs - are nullable)

    internal K GetValue<T, K>(T source, string col)
            where K : class
            where T : IBaseObject
    {
        // ...
        return null;
    }
    

0 comments:

Post a Comment