मेरे पास एक .NET कोर एपीआई है जिसे निम्नलिखित आउटपुट वापस करना है,
{
"TotalValue":200,
"Count":100,
"TypeA":
{
"TotalValue":200,
"Count":100
}
"TypeB":
{
"TotalValue":200,
"Count":100
}
}
मैंने इसे प्राप्त करने के लिए निम्नलिखित की कोशिश की है,
public interface IValue
{
public int TotalValue { get; set; }
public int Count { get; set; }
}
public class Type : IValue
{
public int TotalValue { get; set; }
public int Count { get; set; }
}
public class Test
{
public int TotalValue
{
get
{
return TypeA?.TotalValue ?? 0 + TypeB?.TotalValue ?? 0;
}
}
public int Count
{
get
{
return TypeA?.Count ?? 0 + TypeB?.Count ?? 0;
}
}
public Type TypeA { get; set; }
public Type TypeB { get; set; }
}
लेकिन मूल्य बिल्कुल नहीं जुड़ते हैं, मुझे लगता है कि बहुत अधिक दोहराव है जिसे इस तरह से टाला जा सकता है, भले ही मैं इसे काम पर ले जाऊं, क्या इसे हासिल करने के लिए एक और अधिक सुरुचिपूर्ण समाधान है?
मुझे टाइपए और टाइपबी के मान अलग-अलग सेट करने हैं, टाइपए का मान सेट हो जाता है लेकिन जब मैं टाइपबी को मान सेट करता हूं, तो योग नहीं हो रहा है।
1 उत्तर
ऑपरेटर ??
की पूर्वता के कारण ऐसा नहीं लगता है। जब आप इसे लिखते हैं:
TypeA?.TotalValue ?? 0 + TypeB?.TotalValue ?? 0;
इसका वास्तव में यह अर्थ हो सकता है:
(TypeA?.TotalValue) ?? (0 + TypeB?.TotalValue ?? 0);
इसलिए यदि आपके पास TypeA
शून्य नहीं है, तो केवल उसका TotalValue
वापस आ गया है। TypeB
से मान को अनदेखा किया जाता है, चाहे वह शून्य हो या नहीं। यदि आपके पास TypeA
शून्य और TypeB
शून्य नहीं है। तब लौटाया गया मान TypeB.TotalValue
से है।
यदि आप ऑपरेटर की प्राथमिकता के बारे में सुनिश्चित नहीं हैं, तो आपको अभिव्यक्ति को समूहबद्ध करने के लिए स्पष्ट रूप से कोष्ठक का उपयोग करना चाहिए जिस तरह से आप चाहते हैं। यह अभिव्यक्ति को स्पष्ट करने में भी मदद करता है।
इसे ठीक करने के लिए, बस अपने इच्छित तरीके से समूहित करें (जैसा कि मैं समझता हूं) इस तरह:
public int TotalValue
{
get
{
return (TypeA?.TotalValue ?? 0) + (TypeB?.TotalValue ?? 0);
}
}
public int Count
{
get
{
return (TypeA?.Count ?? 0) + (TypeB?.Count ?? 0);
}
}
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।
TypeA
औरTypeB
समान हैं इसलिए आप दोनों गुणों के लिए एक ही वर्ग का उपयोग कर सकते हैं।