কোনও সম্পত্তি গতিশীল ভেরিয়েবলের জন্য উপলব্ধ কিনা তা পরীক্ষা করুন


225

আমার অবস্থা খুব সহজ। আমার কোডে কোথাও আমার এটি রয়েছে:

dynamic myVariable = GetDataThatLooksVerySimilarButNotTheSame();

//How to do this?
if (myVariable.MyProperty.Exists)   
//Do stuff

সুতরাং, মূলত আমার প্রশ্নটি কীভাবে পরীক্ষা করতে হবে (কোনও ব্যতিক্রম ছাড়াই) যে আমার গতিশীল পরিবর্তনশীলটিতে একটি নির্দিষ্ট সম্পত্তি উপলব্ধ available আমি করতে পারি GetType()কিন্তু আমি বরং এড়াতে চাই যেহেতু আমার আসলে বস্তুর ধরণটি জানার দরকার নেই। আমি যা জানতে চাই তা হ'ল কোনও সম্পত্তি (বা পদ্ধতি, যদি এটি জীবনকে সহজ করে তোলে) উপলব্ধ কিনা is কোন পয়েন্টার?


1
এখানে বেশ কয়েকটি প্রস্তাবনা রয়েছে: স্ট্যাকওভারফ্লো.com / জিজ্ঞাসা / 2985161/… - তবে এখন পর্যন্ত কোনও গ্রহণযোগ্য উত্তর নেই।
অ্যান্ড্রু অ্যান্ডারসন

ধন্যবাদ, আমি সমাধানগুলি কীভাবে তৈরি করতে পারি তা আমি দেখতে পাচ্ছি, আমি ভাবছিলাম যে আমি মিস করছি এমন কিছু আছে কিনা
রাউন্ডক্রিসিস

উত্তর:


159

আমি মনে করি যে dynamicভেরিয়েবলের অ্যাক্সেস না করে নির্দিষ্ট সদস্য রয়েছে কিনা তা খুঁজে পাওয়ার কোনও উপায় নেই , আপনি যদি সি # সংকলকটিতে ডায়নামিক বাইন্ডিংয়ের পদ্ধতিটি পুনরায় প্রয়োগ না করেন। যার মধ্যে সম্ভবত প্রচুর অনুমান করা যাবে, কারণ এটি সি # স্পেসিফিকেশন অনুযায়ী বাস্তবায়ন-সংজ্ঞায়িত।

সুতরাং আপনার সদস্যটিকে অ্যাক্সেস করার চেষ্টা করা উচিত এবং যদি ব্যর্থ হয় তবে এটি ব্যতিক্রম ধরা উচিত:

dynamic myVariable = GetDataThatLooksVerySimilarButNotTheSame();

try
{
    var x = myVariable.MyProperty;
    // do stuff with x
}
catch (RuntimeBinderException)
{
    //  MyProperty doesn't exist
} 

2
আমি এটিকে এত দীর্ঘ সময় হিসাবে উত্তর হিসাবে চিহ্নিত করব, এটি সর্বোত্তম উত্তর বলে মনে হচ্ছে
23:49


20
@ অ্যান্টিস্ট্রিম্যাসন যদি আপনি বোঝাতে চান IDictionaryএবং কেবল ExpandoObjectএটির সাথে কাজ করা , এটি কেবলমাত্র কাজ করে তবে এটি অন্য কোনও dynamicবস্তুতে কাজ করবে না ।
svick

5
RuntimeBinderExceptionহয় Microsoft.CSharp.RuntimeBinderনামস্থান।
ডেভিডআরআর

8
আমি এখনও এই পরিস্থিতিটির সুনির্দিষ্ট বিবেচনা না করে / যদি অন্যথায় খারাপ অভ্যাসের পরিবর্তে চেষ্টা / ধরাকে ব্যবহার করার মতো মনে করি।
আলেকজান্ডার রায়ান ব্যাগেট

74

আমি ভেবেছিলাম আমি মার্তিজানের উত্তর এবং সাইক এর উত্তরের তুলনা করব ...

নিম্নলিখিত প্রোগ্রামটি নিম্নলিখিত ফলাফলগুলি প্রদান করে:

Testing with exception: 2430985 ticks
Testing with reflection: 155570 ticks

void Main()
{
    var random = new Random(Environment.TickCount);

    dynamic test = new Test();

    var sw = new Stopwatch();

    sw.Start();

    for (int i = 0; i < 100000; i++)
    {
        TestWithException(test, FlipCoin(random));
    }

    sw.Stop();

    Console.WriteLine("Testing with exception: " + sw.ElapsedTicks.ToString() + " ticks");

    sw.Restart();

    for (int i = 0; i < 100000; i++)
    {
        TestWithReflection(test, FlipCoin(random));
    }

    sw.Stop();

    Console.WriteLine("Testing with reflection: " + sw.ElapsedTicks.ToString() + " ticks");
}

class Test
{
    public bool Exists { get { return true; } }
}

bool FlipCoin(Random random)
{
    return random.Next(2) == 0;
}

bool TestWithException(dynamic d, bool useExisting)
{
    try
    {
        bool result = useExisting ? d.Exists : d.DoesntExist;
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}

bool TestWithReflection(dynamic d, bool useExisting)
{
    Type type = d.GetType();

    return type.GetProperties().Any(p => p.Name.Equals(useExisting ? "Exists" : "DoesntExist"));
}

ফলস্বরূপ আমি প্রতিবিম্বটি ব্যবহার করার পরামর্শ দেব। নিচে দেখ.


বেল্যান্ডের মন্তব্যের প্রতিক্রিয়া:

অনুপাতগুলি reflection:exception100000 পুনরাবৃত্তির জন্য টিক্স:

Fails 1/1: - 1:43 ticks
Fails 1/2: - 1:22 ticks
Fails 1/3: - 1:14 ticks
Fails 1/5: - 1:9 ticks
Fails 1/7: - 1:7 ticks
Fails 1/13: - 1:4 ticks
Fails 1/17: - 1:3 ticks
Fails 1/23: - 1:2 ticks
...
Fails 1/43: - 1:2 ticks
Fails 1/47: - 1:1 ticks

... যথেষ্ট ন্যায্য - যদি আপনি এটির সম্ভাব্যতা ~ 1/47 এর চেয়ে কম ব্যর্থ হওয়ার প্রত্যাশা করেন তবে ব্যতিক্রম হিসাবে যান।


উপরেরগুলি ধরে নিয়েছে যে আপনি GetProperties()প্রতিবারের মতো চালাচ্ছেন । আপনি GetProperties()কোনও অভিধানে বা অনুরূপ প্রতিটি ধরণের ফলাফলের ক্যাচ করে প্রক্রিয়াটি দ্রুত করতে সক্ষম হতে পারেন । আপনি যদি একই ধরণের বার বার পরীক্ষা করে দেখেন তবে এটি সহায়তা করতে পারে।


7
আমি সম্মত এবং আমার কাজের প্রতিফলন পছন্দ যেখানে উপযুক্ত। ট্রাই / ক্যাচের উপর যে লাভ রয়েছে তা কেবলমাত্র ব্যতিক্রম ছুঁড়ে ফেলা হলে। সুতরাং এখানে প্রতিবিম্ব ব্যবহার করার আগে কারও জিজ্ঞাসা করা উচিত - এটি কি কোনও নির্দিষ্ট উপায়ে হওয়ার সম্ভাবনা রয়েছে? 90% বা এমনকি 75% সময়, আপনার কোডটি কি পাস হবে? তারপরে চেষ্টা করুন / ক্যাচটি এখনও সর্বোত্তম। যদি এটি বাতাসে থাকে, বা একের পক্ষে অনেক বেশি পছন্দ সম্ভবত সবচেয়ে বেশি হয় তবে আপনার প্রতিচ্ছবি স্পষ্ট।
বোল্যান্ড

@ ব্ল্যান্ড সম্পাদিত উত্তর।
ডেভ_আই

1
ধন্যবাদ, এখন সত্যিই সম্পূর্ণ দেখায়।
মজাদার

@ ডেভ_আই উভয়ের তুলনা করা মোটেও উপযুক্ত নয় যেহেতু উভয়ই আলাদা আচরণ করে। এসভিকের উত্তর আরও সম্পূর্ণ।
নওফাল

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

52

প্রতিবিম্ব ব্যবহার করতে পারেন?

dynamic myVar = GetDataThatLooksVerySimilarButNotTheSame();
Type typeOfDynamic = myVar.GetType();
bool exist = typeOfDynamic.GetProperties().Where(p => p.Name.Equals("PropertyName")).Any(); 

2
প্রশ্নটি থেকে উদ্ধৃতি "। আমি গেটটাইপ করতে পারি () তবে আমি বরং তা এড়াতে পারি"
রাউন্ডক্রিসিস


12
আপনি কেবল ছাড়াই করতে পারেন Where:.Any(p => p.Name.Equals("PropertyName"))
ডেভ_আই

উত্তর তুলনা করার জন্য দয়া করে আমার উত্তর দেখুন
dav_i

3
একটি এক মাছ ধরার নৌকা হিসাবে: ((Type)myVar.GetType()).GetProperties().Any(x => x.Name.Equals("PropertyName"))। টাইপ করা কাস্ট করতে ল্যাম্বডা সম্পর্কে সংকলকটিকে খুশি করতে প্রয়োজনীয়।
মুশিননশিন

38

এটি যদি কাউকে সহায়তা করে:

যদি পদ্ধতিটি GetDataThatLooksVerySimilarButNotTheSame()কোনও ফেরত দেয় তবে ExpandoObjectআপনি IDictionaryচেক করার আগে একটিতেও কাস্ট করতে পারেন ।

dynamic test = new System.Dynamic.ExpandoObject();
test.foo = "bar";

if (((IDictionary<string, object>)test).ContainsKey("foo"))
{
    Console.WriteLine(test.foo);
}

3
কেন এই উত্তরটির বেশি ভোট নেই তা নিশ্চিত নন, কারণ এটি যা অনুরোধ করেছিল ঠিক তাই করে (কোনও ব্যতিক্রম নিক্ষেপ বা প্রতিবিম্ব নয়)।
ওল্ফসহেড

7
@ ওল্ফসহেড এই উত্তরটি দুর্দান্ত যদি আপনি জানতে পারেন যে আপনার গতিশীল অবজেক্টটি এক্সপান্ডোঅবজেক্ট বা অন্য কোনও কিছু যা আইডিয়োরি <স্ট্রিং, অবজেক্ট> প্রয়োগ করে তবে যদি এটি অন্যরকম কিছু ঘটে তবে এটি ব্যর্থ হবে।
দামিয়ান পাওয়েল

9

এর দুটি সাধারণ সমাধানগুলির মধ্যে রয়েছে কল করা এবং এটি ধরা RuntimeBinderException, কলটি পরীক্ষা করার জন্য প্রতিবিম্ব ব্যবহার করা বা কোনও পাঠ্য বিন্যাসে সিরিয়াল করা এবং সেখান থেকে পার্স করা। ব্যতিক্রমগুলির সাথে সমস্যাটি হ'ল এগুলি খুব ধীর, কারণ যখন একটি নির্মাণ করা হয়, বর্তমান কল স্ট্যাকটি সিরিয়ালযুক্ত হয়। জেএসএন-তে সিরিয়ালাইজ করা বা সাদৃশ্যযুক্ত কোনও কিছুর জন্য একই ধরণের জরিমানা রয়েছে। এটি আমাদের প্রতিবিম্বের সাথে ছেড়ে দেয় তবে এটি কেবল তখনই কাজ করে যদি অন্তর্নিহিত অবজেক্টটি সত্যিকারের সদস্যদের সহ একটি পোকো হয়। যদি এটি কোনও অভিধান, কোনও COM অবজেক্ট, বা কোনও বাহ্যিক ওয়েব পরিষেবা জুড়ে একটি গতিশীল র‌্যাপার হয় তবে প্রতিফলন সাহায্য করবে না।

আর একটি সমাধান হ'ল DynamicMetaObjectডিএলআর তাদের দেখায় সদস্যের নাম পেতে ব্যবহার করুন। নীচের উদাহরণে, আমি ক্ষেত্রটির Dynamicজন্য পরীক্ষা করতে Ageএবং এটি প্রদর্শনের জন্য একটি স্ট্যাটিক ক্লাস ( ) ব্যবহার করি।

class Program
{
    static void Main()
    {
        dynamic x = new ExpandoObject();

        x.Name = "Damian Powell";
        x.Age = "21 (probably)";

        if (Dynamic.HasMember(x, "Age"))
        {
            Console.WriteLine("Age={0}", x.Age);
        }
    }
}

public static class Dynamic
{
    public static bool HasMember(object dynObj, string memberName)
    {
        return GetMemberNames(dynObj).Contains(memberName);
    }

    public static IEnumerable<string> GetMemberNames(object dynObj)
    {
        var metaObjProvider = dynObj as IDynamicMetaObjectProvider;

        if (null == metaObjProvider) throw new InvalidOperationException(
            "The supplied object must be a dynamic object " +
            "(i.e. it must implement IDynamicMetaObjectProvider)"
        );

        var metaObj = metaObjProvider.GetMetaObject(
            Expression.Constant(metaObjProvider)
        );

        var memberNames = metaObj.GetDynamicMemberNames();

        return memberNames;
    }
}

দেখা যাচ্ছে যে Dynamiteyনুগেট প্যাকেজটি ইতিমধ্যে এটি করেছে। ( nuget.org/packages/ ডায়নামাইটে )
দামিয়ান পাওয়েল

8

ডেনিসের উত্তর আমাকে জসনঅবজেক্টস ব্যবহার করে অন্য একটি সমাধানের জন্য ভাবতে বাধ্য করেছে,

একটি শিরোনাম সম্পত্তি তদন্তকারী:

Predicate<object> hasHeader = jsonObject =>
                                 ((JObject)jsonObject).OfType<JProperty>()
                                     .Any(prop => prop.Name == "header");

বা সম্ভবত আরও ভাল:

Predicate<object> hasHeader = jsonObject =>
                                 ((JObject)jsonObject).Property("header") != null;

উদাহরণ স্বরূপ:

dynamic json = JsonConvert.DeserializeObject(data);
string header = hasHeader(json) ? json.header : null;

1
দয়া করে এই উত্তরটিতে কী ভুল আছে তা জানার কোন সুযোগ আছে?
চার্লস HETIER

কেন এটিকে ভোট দেওয়া হয়েছে তা জানেন না, আমার পক্ষে দুর্দান্ত কাজ করেছেন। আমি প্রতিটি সম্পত্তির জন্য প্রেডিকেটকে একটি সহায়ক শ্রেণিতে স্থানান্তরিত করেছি এবং প্রতিটিটির কাছ থেকে একটি বিল ফিরিয়ে আনার জন্য ইনভোক পদ্ধতিটি ডাকলাম।

7

ঠিক আছে, আমি একই সমস্যার মুখোমুখি হয়েছি কিন্তু ইউনিট পরীক্ষায়।

শার্পটেষ্টেক্সেক্স ব্যবহার করে আপনি কোনও সম্পত্তি বিদ্যমান কিনা তা পরীক্ষা করতে পারেন। আমি এই পরীক্ষাটি আমার নিয়ন্ত্রকদের ব্যবহার করি, কারণ যেহেতু JSON অবজেক্টটি গতিশীল, তাই কেউ নাম পরিবর্তন করতে এবং জাভাস্ক্রিপ্ট বা অন্য কোনও ক্ষেত্রে এটি পরিবর্তন করতে ভুলে যেতে পারে, তাই নিয়ামক লেখার সময় সমস্ত বৈশিষ্ট্যের জন্য পরীক্ষা করা আমার নিরাপত্তা বাড়াতে হবে।

উদাহরণ:

dynamic testedObject = new ExpandoObject();
testedObject.MyName = "I am a testing object";

এখন, শর্টেস্টেসেক্স ব্যবহার করে:

Executing.This(delegate {var unused = testedObject.MyName; }).Should().NotThrow();
Executing.This(delegate {var unused = testedObject.NotExistingProperty; }).Should().Throw();

এটি ব্যবহার করে, আমি "হ্যাড ()। নটথ্রো ()" ব্যবহার করে বিদ্যমান বিদ্যমান বৈশিষ্ট্যগুলি পরীক্ষা করি।

এটি সম্ভবত বিষয়বহুল, তবে কারও পক্ষে উপকারী হতে পারে।


ধন্যবাদ, খুব দরকারী। শার্পটেষ্টেক্সেক্স ব্যবহার করে গতিশীল সম্পত্তির মূল্য পরীক্ষা করতে আমি নীচের লাইনটি ব্যবহার করি:((string)(testedObject.MyName)).Should().Be("I am a testing object");
রিমকো জানসেন

2

@ কেরস্কের উত্তর অনুসরণ করে আপনি ফাংশনটিকে এমন সহায়ক হিসাবে গুটিয়ে রাখতে পারেন:

public static bool HasProperty(ExpandoObject expandoObj,
                               string name)
{
    return ((IDictionary<string, object>)expandoObj).ContainsKey(name);
}

2

আমার জন্য এটি কাজ করে:

if (IsProperty(() => DynamicObject.MyProperty))
  ; // do stuff



delegate string GetValueDelegate();

private bool IsProperty(GetValueDelegate getValueMethod)
{
    try
    {
        //we're not interesting in the return value.
        //What we need to know is whether an exception occurred or not

        var v = getValueMethod();
        return v != null;
    }
    catch (RuntimeBinderException)
    {
        return false;
    }
    catch
    {
        return true;
    }
}

nullসম্পত্তিটির অস্তিত্ব নেই তার অর্থ এই নয়
কোয়েটজলক্যাটল

আমি জানি তবে এটি যদি শূন্য হয় তবে মানটির সাথে আমার কিছু করার দরকার নেই তাই আমার ব্যবহারের জন্য এটি ঠিক আছে
জাস্টার

0

আপনি যদি গতিশীল হিসাবে ব্যবহৃত ধরণটি নিয়ন্ত্রণ করেন, তবে আপনি প্রতিটি সম্পত্তি অ্যাক্সেসের জন্য মানটির পরিবর্তে একটি টুপল ফিরিয়ে দিতে পারবেন না? কিছুটা এইরকম...

public class DynamicValue<T>
{
    internal DynamicValue(T value, bool exists)
    {
         Value = value;
         Exists = exists;
    }

    T Value { get; private set; }
    bool Exists { get; private set; }
}

সম্ভবত একটি নির্বোধ বাস্তবায়ন, তবে আপনি যদি প্রতিবার অভ্যন্তরীণভাবে এর মধ্যে একটি তৈরি করেন এবং আসল মানের পরিবর্তে ফিরে আসেন তবে আপনি Existsপ্রতিটি সম্পত্তি অ্যাক্সেস পরীক্ষা করতে পারেন এবং তারপরে Valueমানটি default(T)(এবং অপ্রাসঙ্গিক) যদি তা না করে তবে আঘাত করতে পারেন ।

এটি বলেছিল, কীভাবে গতিশীল কাজ করে সে সম্পর্কে আমি কিছু জ্ঞান অনুপস্থিত হতে পারি এবং এটি সম্ভবত কার্যকর পরামর্শ নয়।


0

আমার ক্ষেত্রে, একটি নির্দিষ্ট নাম সহ একটি পদ্ধতির অস্তিত্বের জন্য আমার পরীক্ষা করা প্রয়োজন, তাই আমি তার জন্য একটি ইন্টারফেস ব্যবহার করেছি

var plugin = this.pluginFinder.GetPluginIfInstalled<IPlugin>(pluginName) as dynamic;
if (plugin != null && plugin is ICustomPluginAction)
{
    plugin.CustomPluginAction(action);
}

এছাড়াও, ইন্টারফেসে কেবলমাত্র পদ্ধতির চেয়ে বেশি কিছু থাকতে পারে:

ইন্টারফেসে পদ্ধতি, বৈশিষ্ট্য, ইভেন্ট, সূচক বা এই চার সদস্যের যে কোনও সমন্বয় থাকতে পারে।

থেকে: ইন্টারফেস (সি # প্রোগ্রামিং গাইড)

মার্জিত এবং ব্যতিক্রম ফাঁদে বা প্রতিচ্ছবি খেলতে হবে না ...


0

আমি জানি এটি সত্যিই পুরানো পোস্ট তবে dynamicটাইপ-ইন দিয়ে কাজ করার একটি সহজ সমাধান এখানে c#

  1. প্রত্যক্ষ বৈশিষ্ট্য গণনা করতে সাধারণ প্রতিবিম্ব ব্যবহার করতে পারেন
  2. বা objectএক্সটেনশন পদ্ধতি ব্যবহার করতে পারেন
  3. বা GetAsOrDefault<int>বিদ্যমান থাকলে মান সহ একটি নতুন দৃ strongly়ভাবে টাইপ করা অবজেক্ট পেতে যদি পদ্ধতি ব্যবহার করুন বা না থাকলে ডিফল্ট থাকে।
public static class DynamicHelper
{
    private static void Test( )
    {
        dynamic myobj = new
                        {
                            myInt = 1,
                            myArray = new[ ]
                                      {
                                          1, 2.3
                                      },
                            myDict = new
                                     {
                                         myInt = 1
                                     }
                        };

        var myIntOrZero = myobj.GetAsOrDefault< int >( ( Func< int > )( ( ) => myobj.noExist ) );
        int? myNullableInt = GetAs< int >( myobj, ( Func< int > )( ( ) => myobj.myInt ) );

        if( default( int ) != myIntOrZero )
            Console.WriteLine( $"myInt: '{myIntOrZero}'" );

        if( default( int? ) != myNullableInt )
            Console.WriteLine( $"myInt: '{myNullableInt}'" );

        if( DoesPropertyExist( myobj, "myInt" ) )
            Console.WriteLine( $"myInt exists and it is: '{( int )myobj.myInt}'" );
    }

    public static bool DoesPropertyExist( dynamic dyn, string property )
    {
        var t = ( Type )dyn.GetType( );
        var props = t.GetProperties( );
        return props.Any( p => p.Name.Equals( property ) );
    }

    public static object GetAs< T >( dynamic obj, Func< T > lookup )
    {
        try
        {
            var val = lookup( );
            return ( T )val;
        }
        catch( RuntimeBinderException ) { }

        return null;
    }

    public static T GetAsOrDefault< T >( this object obj, Func< T > test )
    {
        try
        {
            var val = test( );
            return ( T )val;
        }
        catch( RuntimeBinderException ) { }

        return default( T );
    }
}

0

ExpandoObjectউত্তরাধিকার হিসাবে IDictionary<string, object>আপনি নিম্নলিখিত চেক ব্যবহার করতে পারেন

dynamic myVariable = GetDataThatLooksVerySimilarButNotTheSame();

if (((IDictionary<string, object>)myVariable).ContainsKey("MyProperty"))    
//Do stuff

এই চেকটি সম্পাদন করার জন্য আপনি কোনও ইউটিলিটি পদ্ধতি তৈরি করতে পারেন, যা কোডটিকে আরও পরিষ্কার এবং পুনরায় ব্যবহারযোগ্য করে তুলবে


-1

এখানে অন্য উপায়:

using Newtonsoft.Json.Linq;

internal class DymanicTest
{
    public static string Json = @"{
            ""AED"": 3.672825,
            ""AFN"": 56.982875,
            ""ALL"": 110.252599,
            ""AMD"": 408.222002,
            ""ANG"": 1.78704,
            ""AOA"": 98.192249,
            ""ARS"": 8.44469
}";

    public static void Run()
    {
        dynamic dynamicObject = JObject.Parse(Json);

        foreach (JProperty variable in dynamicObject)
        {
            if (variable.Name == "AMD")
            {
                var value = variable.Value;
            }
        }
    }
}

2
জওবজেক্টের বৈশিষ্ট্য পরীক্ষা করার বিষয়ে প্রশ্নটি আপনি কোথায় পেয়েছেন? আপনার উত্তর কেবলমাত্র অবজেক্ট / শ্রেণিতে সীমাবদ্ধ যা তাদের বৈশিষ্ট্যগুলির তুলনায় সংখ্যাগুণ প্রকাশ করে। দ্বারা গ্যারান্টিযুক্ত না dynamicdynamicমূলশব্দটি অনেক বিস্তৃত বিষয়। Countআপনি dynamic foo = new List<int>{ 1,2,3,4 }যেমন পরীক্ষা করতে পারেন কিনা তা পরীক্ষা করে দেখুন
কোয়েটজলকোটল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.