কোনও সম্পত্তির সম্পত্তি নাল কিনা তা যাচাই করার জন্য সি # মার্জিত উপায়


100

সি # তে, বলুন যে আপনি এই উদাহরণে প্রপার্টি সি'র কোনও মান টানতে চান এবং অবজেক্টএ, প্রপার্টিএ এবং প্রপার্টিবি সবই শূন্য হতে পারে।

অবজেক্টএ.প্রোপার্টিএ.প্রপার্টিবি.প্রপার্টিসি

আমি কীভাবে সর্বনিম্ন কোড সহ নিরাপদে সম্পত্তি পেতে পারি?

এখনই আমি পরীক্ষা করব:

if(ObjectA != null && ObjectA.PropertyA !=null && ObjectA.PropertyA.PropertyB != null)
{
    // safely pull off the value
    int value = objectA.PropertyA.PropertyB.PropertyC;
}

এটির মতো আরও কিছু (সিউডো কোড) করা ভাল লাগবে।

int value = ObjectA.PropertyA.PropertyB ? ObjectA.PropertyA.PropertyB : defaultVal;

সম্ভবত নাল-কোয়েলসিং অপারেটরটির সাথে আরও ধসে পড়েছে।

সম্পাদনা মূলত আমি বলেছিলাম যে আমার দ্বিতীয় উদাহরণটি জেএসের মতো ছিল, তবে আমি এটি পিএসইডো-কোডে পরিবর্তন করেছি কারণ এটি সঠিকভাবে উল্লেখ করা হয়েছিল যে এটি জেএসে কাজ করবে না।


আপনার জেএস উদাহরণটি কীভাবে কাজ করে তা আমি দেখতে পাই না। যখনই ObjectAবা PropertyAশূন্য থাকে তখন আপনার একটি "প্রত্যাশিত প্রত্যাশিত" ত্রুটি পাওয়া উচিত ।
লিঙ্কনঙ্ক

উত্তর:


124

সি # 6 এ আপনি নাল কন্ডিশনাল অপারেটর ব্যবহার করতে পারেন । সুতরাং আসল পরীক্ষাটি হ'ল:

int? value = objectA?.PropertyA?.PropertyB?.PropertyC;

4
আপনি কি ব্যাখ্যা করতে পারেন এটি কি করে? নাল valueহলে সমান কি PropertyC? বা যদি PropertyBনাল হয়? যদি Object Aনাল হয়?
কলব ক্যানিয়ন

4
যদি এই বৈশিষ্ট্যগুলির মধ্যে কোনও শূন্য হয়, তবে পুরো বিবৃতিটি সেই হিসাবে প্রত্যাবর্তন করবে null। এটি বাম থেকে ডানে শুরু হয়। সিনট্যাকটিকাল চিনি ব্যতীত এটি এমন এক বিবরণের সমতুল্য যেখানে বিবৃতি যেখানে if(propertyX == null) {value = null} else if (propertyY == null){ value = null} else if......সর্বশেষে প্রকাশ হয়if(propertyZ != null) { value = propertyZ }
গোয়েন্দা

27

সংক্ষিপ্ত সম্প্রসারণ পদ্ধতি:

public static TResult IfNotNull<TInput, TResult>(this TInput o, Func<TInput, TResult> evaluator)
  where TResult : class where TInput : class
{
  if (o == null) return null;
  return evaluator(o);
}

ব্যবহার

PropertyC value = ObjectA.IfNotNull(x => x.PropertyA).IfNotNull(x => x.PropertyB).IfNotNull(x => x.PropertyC);

এই সাধারণ এক্সটেনশন পদ্ধতি এবং আরও অনেক কিছু আপনি খুঁজে পেতে পারেন http://devtalk.net/csharp/chained-null-checks-and-the-maybe-monad/ এ

সম্পাদনা:

মুহুর্তের জন্য এটি ব্যবহার করার পরে আমি মনে করি এই পদ্ধতির যথাযথ নামটি মূল সহ () এর পরিবর্তে ifNotNull () হওয়া উচিত ।


15

আপনি কি আপনার ক্লাসে একটি পদ্ধতি যুক্ত করতে পারেন? যদি তা না হয় তবে আপনি কি এক্সটেনশন পদ্ধতিগুলি ব্যবহার করার কথা ভেবেছেন? আপনার অবজেক্ট টাইপের জন্য আপনি একটি এক্সটেনশন পদ্ধতি তৈরি করতে পারেন GetPropC()

উদাহরণ:

public static class MyExtensions
{
    public static int GetPropC(this MyObjectType obj, int defaltValue)
    {
        if (obj != null && obj.PropertyA != null & obj.PropertyA.PropertyB != null)
            return obj.PropertyA.PropertyB.PropertyC;
        return defaltValue;
    }
}

ব্যবহার:

int val = ObjectA.GetPropC(0); // will return PropC value, or 0 (defaltValue)

যাইহোক, এটি ধরে নিয়েছে আপনি .NET 3 বা তার বেশি ব্যবহার করছেন।


11

আপনি যেভাবে এটি করছেন তা সঠিক।

আপনি লিনক এক্সপ্রেশন ব্যবহার করে এখানে বর্ণিত মত একটি কৌশল ব্যবহার করতে পারেন :

int value = ObjectA.NullSafeEval(x => x.PropertyA.PropertyB.PropertyC, 0);

তবে এটি খুব ধীর যে প্রতিটি সম্পত্তি ম্যানুয়ালি পরীক্ষা করে ...


10

ডিমেটারের আইনটি পালন করার জন্য রিফ্যাক্টর


আপনি যখন কেবলমাত্র সম্পত্তি পড়ছেন তখন আমি কেবলমাত্র তিনটি স্তরের গভীর অবজেক্টের গ্রাফটিকে বিবেচনা করি না। আমি সম্মত হই যে ওপি প্রপার্টি সি এর মাধ্যমে রেফারেন্সযুক্ত কোনও আইটেমে কোনও পদ্ধতি কল করতে চায় তবে তা যখন এমন সম্পত্তি নয় যে কেবল পড়ার আগে নাল পরীক্ষা করতে হবে checking এই উদাহরণে এটি গ্রাহক ঠিকানা হিসাবে খুব সহজ হতে পারে ount দেশ যেখানে কীভ্যালিউপায়ারের মতো একটি রেফারেন্স টাইপ হতে পারে। নাল রেফ চেকগুলির প্রয়োজনীয়তা রোধ করতে আপনি কীভাবে এটি রিফ্যাক্টর করবেন?
ড্যারেন লুইস

ওপি উদাহরণটি আসলে 4 গভীর। আমার পরামর্শটি নাল রেফার চেকগুলি সরিয়ে ফেলার নয় বরং তাদের সঠিকভাবে পরিচালনা করতে সক্ষম হওয়ার মতো অবজেক্টগুলিতে তাদের সনাক্ত করা। বেশিরভাগ "থাম্বের নিয়ম" এর মতো ব্যতিক্রম রয়েছে তবে আমি নিশ্চিত নই যে এটি একটি। আমরা কি একমত হতে সম্মত হতে পারি?
rtalbot

4
আমি @ আর্টালবোটের সাথে একমত (যদিও, ন্যায্যতায় @ ড্যাজ লুইস একটি 4-গভীর উদাহরণ প্রস্তাব করছেন, যেহেতু শেষ আইটেমটি কীভ্যালিউপায়ার)। যদি কোনও গ্রাহক অবজেক্টের সাথে কিছু ঝামেলা হয়, তবে আমি ঠিকানা অজানা-হেরিয়ারির মাধ্যমে এটি কী ব্যবসা দেখছে তা দেখতে পাচ্ছি না। মনে করুন আপনি পরে সিদ্ধান্ত নিয়েছেন যে কোনও কীভ্যালিউপায়ার দেশের সম্পত্তির জন্য এত দুর্দান্ত ধারণা ছিল না। সেক্ষেত্রে প্রত্যেকের কোড পরিবর্তন করতে হবে। এটি একটি ভাল নকশা নয়।
জেফ্রি এল হুইটলেজ

10

আপডেট 2014: সি # 6 এর একটি নতুন অপারেটর রয়েছে ?.যার নাম 'নিরাপদ নেভিগেশন' বা 'নাল প্রচার'

parent?.child

Http://blogs.msdn.com/b/jerrynixon/archive/2014/02/26/at-last-c-is-getting-sometimes-called-the-safe-navication-operator.aspx পড়ুনবিশদ জানতে

এটি দীর্ঘদিন ধরেই একটি জনপ্রিয় অনুরোধ https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3990187-add-operator-to-c-?tracking_code=594c10a522f8e9bc987ee4a5e2c0b38d


8

আপনি স্পষ্টতই নুয়েবল মোনাডের সন্ধান করছেন :

string result = new A().PropertyB.PropertyC.Value;

হয়ে যায়

string result = from a in new A()
                from b in a.PropertyB
                from c in b.PropertyC
                select c.Value;

এটি প্রত্যাবর্তন করে null, যদি কোনও স্থায়ী বৈশিষ্ট্য শূন্য হয়; অন্যথায়, মান Value

class A { public B PropertyB { get; set; } }
class B { public C PropertyC { get; set; } }
class C { public string Value { get; set; } }

লাইনকিউ এক্সটেনশন পদ্ধতি:

public static class NullableExtensions
{
    public static TResult SelectMany<TOuter, TInner, TResult>(
        this TOuter source,
        Func<TOuter, TInner> innerSelector,
        Func<TOuter, TInner, TResult> resultSelector)
        where TOuter : class
        where TInner : class
        where TResult : class
    {
        if (source == null) return null;
        TInner inner = innerSelector(source);
        if (inner == null) return null;
        return resultSelector(source, inner);
    }
}

কেন এখানে এক্সটেনশন পদ্ধতি? এটি ব্যবহার করা হচ্ছে না।
ম্লাদেন মিহাজলভিক

4
@ ম্লাদেন মিহাজলভিক: SelectManyএক্সটেনশন পদ্ধতিটি from ... in ... from ... in ...সিনট্যাক্স দ্বারা ব্যবহৃত হয় ।
dtb

5

আপনার ধরণের খালি মানগুলি ধরে নিলে এক পদ্ধতির এটি হবে:

var x = (((objectA ?? A.Empty).PropertyOfB ?? B.Empty).PropertyOfC ?? C.Empty).PropertyOfString;

আমি সি # এর একটি বড় অনুরাগী তবে নতুন জাভাতে (1.7?) খুব সুন্দর জিনিসটি কি? অপারেটর:

 var x = objectA.?PropertyOfB.?PropertyOfC.?PropertyOfString;

4
এটি সত্যিই জাভা 1.7 হতে যাচ্ছে? এটি দীর্ঘ সময়ের জন্য সি # তে অনুরোধ করা হয়েছিল, তবে আমার সন্দেহ যে এটি কখনও ঘটবে ...
টমাস লেভস্ক

দুর্ভাগ্যক্রমে আমার খালি মূল্য নেই। সেই জাভা সিনট্যাক্স দেখতে যদিও মিষ্টি! আমি এটিকে আপ-ভোটাতে যাচ্ছি, কারণ আমি এই সিনট্যাক্সটি চাই!
জন ক্রাগ

4
থমাস: গতবার আমি টেক.পুরিডাঙ্গার.com/ জাভা checked যাচাই করেছিলাম এটি ইঙ্গিত করেছিল যে জাভা এটি পাবে। তবে এখন যখন আমি এটি আবার যাচাই করে বলি: নাল নিরাপদ পরিচালনা: না। সুতরাং আমি আমার বক্তব্যটি প্রত্যাহার করে এটিকে একটি নতুন দিয়ে প্রতিস্থাপন করব: এটি জাভা ১.7 এর জন্য প্রস্তাবিত হয়েছিল কিন্তু তা তৈরি করে নি।
ঠিক আরও একটি রূপক

Monad.net দ্বারা ব্যবহৃত একটি অতিরিক্ত পদ্ধতি হ'ল
অন্য একটি

4
মনে হচ্ছে?। অপারেটর ভিজ্যুয়াল স্টুডিও 2015 এ আছেন https://msdn.microsoft.com/en-us/library/dn986595.aspx
এডওয়ার্ড

4

এই কোডটি "কোডের সর্বনিম্ন পরিমাণ", তবে সেরা অনুশীলন নয়:

try
{
    return ObjectA.PropertyA.PropertyB.PropertyC;
}
catch(NullReferenceException)
{
     return null;
}

4
আমি এই জাতীয় কোডটি দেখেছি এবং পারফরম্যান্স ক্ষতির বিষয়টি উপেক্ষা করে সবচেয়ে বড় সমস্যা হ'ল এটি ডিবাগিংকে জটিল করে তোলে কারণ আসল ব্যতিক্রম লক্ষ লক্ষ অকেজো রেফ ব্যতিক্রমগুলিতে ডুবে যায়।
অন্য একটি রূপক

কখনও কখনও এটি 3 বছর পরে আমার নিজের উত্তর পড়তে মজাদার হয়। আমার মনে হয়, আমি আজ আলাদাভাবে উত্তর দেব। আমি বলব যে কোডটি ডেমিটারের আইন লঙ্ঘন করে এবং আমি এটিকে পুনরায় ব্যবহারের পরামর্শ দেব যাতে এটি না হয়।
বরিস মোডিলেভস্কি

4
আজকের হিসাবে, আসল উত্তরের 7 বছর পরে, আমি @ ফিলিপ এনগনে যোগদান করবো এবং নীচের বাক্য গঠনের সাথে সি # 6 ব্যবহার করব? মান = অবজেক্টএ? .প্রপার্টিএ? .প্রপার্টিবি?
বরিস মোডলিভস্কি

4

যখন আমাকে এর মতো কলগুলি চেইন করতে হবে তখন আমি তৈরি করা একটি সহায়ক পদ্ধতি, ট্রাইগেট () এর উপর নির্ভর করি:

    public static U TryGet<T, U>(this T obj, Func<T, U> func)
    {
        return obj.TryGet(func, default(U));
    }

    public static U TryGet<T, U>(this T obj, Func<T, U> func, U whenNull)
    {
        return obj == null ? whenNull : func(obj);
    }

আপনার ক্ষেত্রে, আপনি এটি এর মতো ব্যবহার করবেন:

    int value = ObjectA
        .TryGet(p => p.PropertyA)
        .TryGet(p => p.PropertyB)
        .TryGet(p => p.PropertyC, defaultVal);

আমি মনে করি না এই কোডটি কাজ করে। ডিফল্টওয়ালের ধরণ কী? var p = নতুন ব্যক্তি (); Assert.AreEqual (p.TryGet (x => x.FirstName) .TryGet (x => x.LastName) .TryGet (x => x.NickName, "foo"), "foo");
কিথ

আমি যে উদাহরণটি লিখেছি তা পড়তে হবে: ObjectA.PropertyA.PropertyB.PropertyC। আপনার কোডটি "ফার্স্টনাম" থেকে "লাস্টনাম" নামে একটি সম্পত্তি লোড করার চেষ্টা করছে বলে মনে হচ্ছে, যা উদ্দেশ্যযুক্ত ব্যবহার নয়। আরও সঠিক উদাহরণটি হ'ল এর মতো: var postcode = person.TryGet (p => p.Adress) .TryGet (p => p.Postcode); যাইহোক, আমার ট্রাইগেট () সহায়ক পদ্ধতি সি # 6.0-এ নাল-কন্ডিশনাল অপারেটরের একটি নতুন বৈশিষ্ট্যের সাথে খুব মিল similar এর ব্যবহারটি এর মতো হবে: var পোস্টকোড = ব্যক্তি?। ঠিকানা?? পোস্টকোড; msdn.microsoft.com/en-us/magazine/dn802602.aspx
ইমানুয়েল

3

আমি নতুন সি # 6.0 তে কিছু দেখেছি, এটি 'ব্যবহার করে?' পরিবর্তে চেক

পরিবর্তে ব্যবহারের পরিবর্তে

if (Person != null && Person.Contact!=null && Person.Contact.Address!= null && Person.Contact.Address.City != null)
{ 
  var city = person.contact.address.city;
}

আপনি সহজভাবে ব্যবহার

var city = person?.contact?.address?.city;

আমি আশা করি এটি কারও সাহায্য করেছে।


হালনাগাদ:

আপনি এখন এই মত করতে পারে

 var city = (Person != null)? 
           ((Person.Contact!=null)? 
              ((Person.Contact.Address!= null)?
                      ((Person.Contact.Address.City!=null)? 
                                 Person.Contact.Address.City : null )
                       :null)
               :null)
            : null;

1

আপনি এটি করতে পারেন:

class ObjectAType
{
    public int PropertyC
    {
        get
        {
            if (PropertyA == null)
                return 0;
            if (PropertyA.PropertyB == null)
                return 0;
            return PropertyA.PropertyB.PropertyC;
        }
    }
}



if (ObjectA != null)
{
    int value = ObjectA.PropertyC;
    ...
}

বা আরও ভাল এটি হতে পারে:

private static int GetPropertyC(ObjectAType objectA)
{
    if (objectA == null)
        return 0;
    if (objectA.PropertyA == null)
        return 0;
    if (objectA.PropertyA.PropertyB == null)
        return 0;
    return objectA.PropertyA.PropertyB.PropertyC;
}


int value = GetPropertyC(ObjectA);

1

আপনি নিম্নলিখিত এক্সটেনশনটি ব্যবহার করতে পারেন এবং আমি মনে করি এটি সত্যিই ভাল:

/// <summary>
/// Simplifies null checking
/// </summary>
public static TR Get<TF, TR>(TF t, Func<TF, TR> f)
    where TF : class
{
    return t != null ? f(t) : default(TR);
}

/// <summary>
/// Simplifies null checking
/// </summary>
public static TR Get<T1, T2, TR>(T1 p1, Func<T1, T2> p2, Func<T2, TR> p3)
    where T1 : class
    where T2 : class
{
    return Get(Get(p1, p2), p3);
}

/// <summary>
/// Simplifies null checking
/// </summary>
public static TR Get<T1, T2, T3, TR>(T1 p1, Func<T1, T2> p2, Func<T2, T3> p3, Func<T3, TR> p4)
    where T1 : class
    where T2 : class
    where T3 : class
{
    return Get(Get(Get(p1, p2), p3), p4);
}

এবং এটি এর মতো ব্যবহৃত হয়:

int value = Nulify.Get(objectA, x=>x.PropertyA, x=>x.PropertyB, x=>x.PropertyC);

0

নালাবল টাইপের অনুরূপ প্যাটার্নটি ব্যবহার করে আমি সম্পত্তি নিজস্ব ধরণের (বা এটি কোনও প্রকারের এক্সটেনশন পদ্ধতি) টাইপ করে নিজের পদ্ধতি লিখব।

class PropertyAType
{
   public PropertyBType PropertyB {get; set; }

   public PropertyBType GetPropertyBOrDefault()
   {
       return PropertyB != null ? PropertyB : defaultValue;
   }
}

ঠিক আছে, সেক্ষেত্রে স্পষ্টতই প্রপার্টিবি কখনই শূন্য হতে পারে না।
পুনরাবৃত্ত

0

এই পোস্টটি জুড়ে কেবল হোঁচট খেয়েছে।

কিছুক্ষণ আগে আমি ভিজুয়াল স্টুডিও কানেক্টে একটি নতুন যুক্ত করার বিষয়ে একটি পরামর্শ দিয়েছিলাম ??? অপারেটর ।

http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4104392-add-as-an-recursive-null-references-check-opera

এটির জন্য ফ্রেমওয়ার্ক টিম থেকে কিছু কাজ প্রয়োজন তবে ভাষাটি পরিবর্তন করার দরকার নেই কেবল কিছু সংকলক যাদু করার দরকার। ধারণাটি ছিল যে সংকলকটির এই কোডটি পরিবর্তন করা উচিত (সিনট্যাক্স এটিএম অনুমোদিত নয়)

string product_name = Order.OrderDetails[0].Product.Name ??? "no product defined";

এই কোড মধ্যে

Func<string> _get_default = () => "no product defined"; 
string product_name = Order == null 
    ? _get_default.Invoke() 
    : Order.OrderDetails[0] == null 
        ? _get_default.Invoke() 
        : Order.OrderDetails[0].Product == null 
            ? _get_default.Invoke() 
            : Order.OrderDetails[0].Product.Name ?? _get_default.Invoke()

নাল চেক করার জন্য এটি দেখতে পারে

bool isNull = (Order.OrderDetails[0].Product ??? null) == null;

0

আমি একটি পদ্ধতি লিখেছি যা একটি ডিফল্ট মান গ্রহণ করে, এখানে এটি কীভাবে ব্যবহার করবেন তা এখানে:

var teacher = new Teacher();
return teacher.GetProperty(t => t.Name);
return teacher.GetProperty(t => t.Name, "Default name");

কোডটি এখানে:

public static class Helper
{
    /// <summary>
    /// Gets a property if the object is not null.
    /// var teacher = new Teacher();
    /// return teacher.GetProperty(t => t.Name);
    /// return teacher.GetProperty(t => t.Name, "Default name");
    /// </summary>
    public static TSecond GetProperty<TFirst, TSecond>(this TFirst item1,
        Func<TFirst, TSecond> getItem2, TSecond defaultValue = default(TSecond))
    {
        if (item1 == null)
        {
            return defaultValue;
        }

        return getItem2(item1);
    }
}

4
এই সমাধানটি ইতিমধ্যে অন্যান্য উত্তরে সরবরাহ করা হয়েছে (বারবার)। এটি আবার পোস্ট করার কোনও কারণ নেই ।
পরিবেশন করুন

আমি কোনও ডিফল্ট মান গ্রহণ করে দেখিনি।
আকিরা ইয়ামামোটো

আমি 6 জনকে গণনা করি যা একটি সংজ্ঞায়িত ডিফল্ট মান ব্যবহার করে। আপাতদৃষ্টিতে আপনি এত কঠিন দেখতে পান নি।
15:25 এ পরিবেশন করুন

0

এটা সম্ভব নয়.
ObjectA.PropertyA.PropertyBব্যর্থ হবে যদিObjectAনাল ডেরেফারেন্সিংয়ের কারণে নাল , যা একটি ত্রুটি।

if(ObjectA != null && ObjectA.PropertyA... সংক্ষিপ্ত circuiting কারণে কাজ, অর্থাত ObjectA.PropertyAযদি চেক করা হবে না ObjectAহয়null

আপনি প্রস্তাব করার প্রথম উপায়টি হ'ল উদ্দেশ্য সহ সর্বোত্তম এবং স্পষ্ট। যদি কিছু হয় তবে আপনি এতগুলি নালার উপর নির্ভর না করে পুনরায় নকশার চেষ্টা করতে পারেন।


-1

একবার ল্যাম্বডা গাব্বল-গোকটি পেয়ে আপনি এই পদ্ধতিটি মোটামুটি সোজা-এগিয়ে চলেছেন:

public static TProperty GetPropertyOrDefault<TObject, TProperty>(this TObject model, Func<TObject, TProperty> valueFunc)  
                                                        where TObject : class
    {
        try
        {
            return valueFunc.Invoke(model);
        }
        catch (NullReferenceException nex)
        {
            return default(TProperty);
        }
    }

ব্যবহারের মতো যা দেখতে পারে:

ObjectA objectA = null;

Assert.AreEqual(0,objectA.GetPropertyOrDefault(prop=>prop.ObjectB.ObjectB.ObjectC.ID));

Assert.IsNull(objectA.GetPropertyOrDefault(prop => prop.ObjectB));

আমি কৌতূহলী ছিলাম যে আমি কোনও প্রতিক্রিয়া দেওয়ার পরে কেন কেউ 8 বছর কমিয়ে দেবে (যা সি # 6 এর নাল কোলেসেসের জিনিস ছিল তার বেশ কয়েক বছর আগে)।
ব্ল্যাকজ্যাককেট

-3
var result = nullableproperty ?? defaultvalue;

??(নাল-কোয়ালেসিং অপারেটর) মানে যদি প্রথম যুক্তি null, দ্বিতীয় পরিবর্তে ফিরে যান।


4
এই উত্তরটি ওপির সমস্যা সমাধান করে না। কীভাবে সমাধানটি প্রয়োগ করবেন ?? অবজেক্টএ.প্রপার্টিএ.প্রপার্টিবিতে অপারেটর যখন অভিব্যক্তির সমস্ত অংশ (অবজেক্টএ, প্রপার্টিএ এবং প্রপার্টিবি) শূন্য হতে পারে?
আর্টেমিক্স

সত্য, আমি মনে করি আমি এমনকি প্রশ্নটি মোটেও পড়িনি। যাইহোক, অসম্ভব কিছুই কেবল এটি করবেন না: পি স্ট্যাটিক শূন্যতা মেইন (স্ট্রিং [] আরগস) {একটি সিএ = নতুন এ (); var default_value = নতুন a () {b = নতুন অবজেক্ট ()}; var মান = (সিএ ?? ডিফল্ট_মূল্য)। বি ?? default_value.b; } শ্রেণী a {পাবলিক অবজেক্ট b = নাল; }
অ্যারিডানে Álamo

(ObjectA ?? DefaultMockedAtNull) .PropertyA = নাল ObjectA.PropertyA.PropertyB:? নাল
Aridane Álamo
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.