मेरे पास एक .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
user1890098 4 मई 2021, 15:37
वैसे TypeA और TypeB समान हैं इसलिए आप दोनों गुणों के लिए एक ही वर्ग का उपयोग कर सकते हैं।
 – 
DavidG
4 मई 2021, 15:44
हाँ मुझे इसके बारे में सोचना चाहिए था। अभी भी मूल्यों का योग नहीं हो रहा है। इसके अलावा क्या होता है जब मुझे टाइपए और टाइपबी के लिए अलग-अलग संचालन में मान सेट करना पड़ता है?
 – 
user1890098
4 मई 2021, 15:48
गणना किए गए गुणों को कॉल करने से पहले आपको यह सुनिश्चित करना होगा कि आपने टाइपए और टाइपबी सेट किया है।
 – 
Jonathan Alfaro
4 मई 2021, 16:56
जब मैं टाइपए के लिए मान सेट करता हूं, तो मानों की गणना की जाती है लेकिन अगली बार जब मैं टाइपबी के लिए सेट करता हूं तो यह नहीं हो रहा है
 – 
user1890098
4 मई 2021, 17:43

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);
     }
} 
1
King King 4 मई 2021, 22:11
1
यह काम किया! स्पष्ट स्पष्टीकरण के लिए भी बहुत बहुत धन्यवाद।
 – 
user1890098
4 मई 2021, 23:22