using System.ComponentModel.DataAnnotations;

public class User
{
    [Required]
    public string FirstName { get; set; }

    [Required]
    public string LastName { get; set; }
}

User user = new User
{
    LastName = "Jane"
};

FirstName और LastName आवश्यक हैं, कोड मुझे FirstName के बिना उपयोगकर्ता को इनिशियलाइज़ क्यों करने देता है? मैं इसे कैसे बाध्य कर सकता हूं ताकि FirstName का भी एक मूल्य हो?

1
user16305208 24 जून 2021, 12:45

3 जवाब

सबसे बढ़िया उत्तर

आप जिस आवश्यक विशेषता का उपयोग कर रहे हैं, वह आपके द्वारा किए जा रहे उपयोग से संबंधित नहीं है। यह ModelState से संबंधित है। आप इसके बारे में पढ़ सकते हैं यहां

आपके मामले में, मैं आपको उपयोगकर्ता वर्ग में एक कंस्ट्रक्टर बनाने की सलाह दूंगा:

public User(string firstName, string lastName)
{
    // You may add here validation to make sure firstName and lastName are not nulls.

    FirstName = firstName;
    LastName = lastName;
}

इस तरह, आप उपयोगकर्ता वर्ग को प्रारंभ करते समय इस निर्माता का उपयोग करने के लिए बाध्य करते हैं। ध्यान दें, आप कंस्ट्रक्टर आरंभीकरण के विभिन्न तरीकों की अनुमति देने के लिए कई कंस्ट्रक्टर बना सकते हैं।

फिर आप इसे इस प्रकार उपयोग कर सकते हैं (C# 9.0 - लक्षित-टाइप किए गए नए भाव):

User user = new ("Anders", "Jane");

C# 10 में "आवश्यक" कीवर्ड के साथ क्लास इनिशियलाइज़ेशन पर संपत्ति की आवश्यकता का एक तरीका होगा। इसे इस तरह करना संभव होगा:

public class User
{
    public required string FirstName { get; set; }
    public required string LastName { get; set; }
}

आप और अधिक पढ़ सकते हैं यहां "आवश्यक गुण" अनुभाग में।

10
Misha Zaslavsky 24 जून 2021, 10:05

मॉडल बाइंडिंग के लिए [Required] विशेषता का उपयोग किया जाता है। यदि आपको प्रथम नाम संपत्ति रखने के लिए कक्षा की आवश्यकता है तो आपको एक कन्स्ट्रक्टर जोड़ना चाहिए।

public class User
{
    [Required]
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public User(string firstName)
    {
        FirstName = firstName;
    }
}

User user = new User("FirstName")
{
    LastName = "Jane"
};
3
RichMercer 24 जून 2021, 12:36

आप एक कंस्ट्रक्टर जोड़ सकते हैं जो आपको संपत्ति को इनिशियलाइज़ करने के लिए मजबूर करता है:

public class User
{
    [Required]
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public User(string firstName)
    {
       FirstName = firstName;
    }
}

यह असंभव होगा:

User user = new User
{
    LastName = "Jane"
};

आपको इसे इस तरह करना होगा:

User user = new User("something")
{
    LastName = "Jane"
};

क्योंकि आप अभी भी अपने कंस्ट्रक्टर को null पास कर सकते हैं, आप इसे भी देख सकते हैं:

public User(string firstName)
        {
           if(firstName == null)
           {
              throw new ArgumentNullException(nameof(firstName));
           }
           FirstName = firstName;
        }
4
SomeBody 24 जून 2021, 09:49