कोड के साथ कई समस्याएं जोड़ने की आवश्यकता है। पहला यह है कि आपके प्रकार निरर्थक होना चाहिए। आप इसे where T: struct
निर्दिष्ट करके व्यक्त कर सकते हैं। आपको where TResult: struct
निर्दिष्ट करने की भी आवश्यकता होगी क्योंकि आप इसे एक शून्य प्रकार के रूप में भी उपयोग कर रहे हैं।
एक बार जब आप where T: struct where TResult: struct
को ठीक कर लेंगे तो आपको वापसी मूल्य प्रकार (जो गलत था) और कई अन्य चीजों को भी बदलने की आवश्यकता है।
उन सभी त्रुटियों को ठीक करने और सरल बनाने के बाद, आप इस के साथ हवा:
static TResult? ApplyFunction<T, TResult>(T? nullable, Func<T, TResult> function)
where T: struct
where TResult: struct
{
if (nullable.HasValue)
return function(nullable.Value);
else
return null;
}
नोट आप को फिर से लिखने सकते हैं कि Nullable<T>
T?
के रूप में जो बातें अधिक पठनीय बनाता है।
इसके अलावा, आप लिख सकता है कि एक बयान ?:
का उपयोग कर, लेकिन मैं यह नहीं सोचता के रूप में के रूप में पठनीय है:
return nullable.HasValue ? (TResult?) function(nullable.Value) : null;
आप एक विस्तार विधि में इस डाल करने के लिए चाहते हो सकता है:
public static class NullableExt
{
public static TResult? ApplyFunction<T, TResult>(this T? nullable, Func<T, TResult> function)
where T: struct
where TResult: struct
{
if (nullable.HasValue)
return function(nullable.Value);
else
return null;
}
}
फिर आप इस तरह कोड लिख सकते हैं:
int? x = 10;
double? x1 = x.ApplyFunction(i => Math.Sqrt(i));
Console.WriteLine(x1);
int? y = null;
double? y1 = y.ApplyFunction(i => Math.Sqrt(i));
Console.WriteLine(y1);
स्रोत
2013-05-24 08:42:14
और सवाल क्या है ?? –
अभी इसका परीक्षण नहीं कर सकता है, लेकिन आप 'कार्यान्वयन' के बजाय 'आवेदन फ़ंक्शन ' पर कॉल करें? –
डाउनवॉट्स क्यों? मुझे एक अच्छा सवाल लगता है। –