সি # এসকিউএল সার্ভারে ইসনুল () ফাংশনের সমতুল্য


113

এসকিউএল সার্ভারে আপনি IsNull()কোনও মূল্য শূন্য কিনা তা পরীক্ষা করতে ফাংশনটি ব্যবহার করতে পারেন এবং যদি এটি হয় তবে অন্য মানটি ফিরিয়ে দিন। এখন আমি ভাবছি যে সি # তেও তেমন কিছু আছে কিনা।

উদাহরণস্বরূপ, আমি কিছু করতে চাই:

myNewValue = IsNull(myValue, new MyValue());

পরিবর্তে:

if (myValue == null)
  myValue = new MyValue();
myNewValue = myValue;

ধন্যবাদ।

উত্তর:


204

একে নাল কোয়েলেসিং ( ??) অপারেটর বলা হয় :

myNewValue = myValue ?? new MyValue();

3
আমি নাল-কোলেসিং অপারেটরটি ব্যবহার করার চেষ্টা করেছি তবে ত্রুটিটি অপারেটরকে পেতেই থাকি '??' 'বুল' টাইপের অপারেন্ডগুলিতে প্রয়োগ করা যাবে না? এবং 'int- এ' । ত্রুটিটি বিভ্রান্তিকর ছিল। সমস্যাটি হ'ল আমি বুলিয়ান ভেরিয়েবলের ডান হাতের অপারেণ্ড অবস্থানে একটি ইন্ট বরাদ্দ করার চেষ্টা করছিলাম। আমাকে বদলে যেতে this.BinaryExists = vModel.BinaryExists ?? 0;হয়েছিলthis.BinaryExists = vModel.BinaryExists ?? false;
কুয়েনদা

14

দুঃখের বিষয়, ডিবিএনুলের সাথে কাজ করে এমন নাল কোলেসিং অপারেটরের সমতুল্য নেই; তার জন্য, আপনাকে টার্নারি অপারেটরটি ব্যবহার করতে হবে:

newValue = (oldValue is DBNull) ? null : oldValue;

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

আপনি dbnull কে কোনও বস্তুর ((অবজেক্ট) ওল্ডভ্যালু ?? (অবজেক্ট) ডিবি নুল.ভ্যালু)) এ কাস্ট করতে পারেন
জেরেমি গ্রে

1
@ জেরেমি গ্রে ন্যায্য (object)oldValue ?? (object)DBNull.Value)হবে ((object)oldValue == null) ? (object)DBNull.Value : (object)oldValueযা রবার্ট রসনির সমাধানের সমাধানের সমস্যার থেকে ভিন্ন is
ট্রাইপড

5
public static T isNull<T>(this T v1, T defaultValue)
{
    return v1 == null ? defaultValue : v1;
}

myValue.isNull(new MyValue())

এইভাবে, new MyValue()ইচ্ছামত কার্যকর করা হবে এমনকি যখন myValueশূন্য হয় না এবং এটি প্রয়োজন হয় না !!
এস। সরপুশন

4

সমান পদ্ধতিটি ব্যবহার করুন:

object value2 = null;
Console.WriteLine(object.Equals(value2,null));

এই উত্তরটি কেবল সত্য বা মিথ্যা প্রত্যাবর্তন করে, যা ওপি যা চেয়েছিল তা নয়।
Culme

1

ডিবি নুলসের সাথে কাজ করার জন্য, আমি আমার ভিবি অ্যাপ্লিকেশনগুলির জন্য একটি গুচ্ছ তৈরি করেছি। আমি তাদের সিএক্সএক্সএক্সএক্স 2 বলি কারণ তারা ভিবি-র অন্তর্নির্মিত সিএক্সএক্সএক্স কার্যের সাথে সমান।

আপনি সেগুলি আমার সিএলআর এক্সটেনশান প্রকল্পে দেখতে পারেন

http://www.codeplex.com/ClrExtensions/SourceControl/FileView.aspx?itemId=363867&changeSetId=17967


দেখে মনে হচ্ছে তারা কোডপ্লেক্সের সমস্ত ইউআরএল পরিবর্তন করেছে। : এই চেষ্টা clrextensions.codeplex.com/SourceControl/changeset/view/...
জনাথন অ্যালেন

0

আপনি দুটি ফাংশন লিখুন

    //When Expression is Number
    public static double? isNull(double? Expression, double? Value)
    {
        if (Expression ==null)
        {
            return Value;
        }
        else
        {
            return Expression;
        }
    }


    //When Expression is string (Can not send Null value in string Expression
    public static string isEmpty(string Expression, string Value)
    {
        if (Expression == "")
        {
            return Value;
        }
        else
        {
            return Expression;
        }
    }

তারা খুব ভাল কাজ করে


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

0

আমি আমার ডেটারো টাইপগুলিতে নিম্নলিখিত এক্সটেনশন পদ্ধতিটি ব্যবহার করেছি:

    public static string ColumnIsNull(this System.Data.DataRow row, string colName, string defaultValue = "")
    {
        string val = defaultValue;
        if (row.Table.Columns.Contains(colName))
        {
            if (row[colName] != DBNull.Value)
            {
                val = row[colName]?.ToString();
            }
        }
        return val;
    }

ব্যবহার:

MyControl.Text = MyDataTable.Rows[0].ColumnIsNull("MyColumn");
MyOtherControl.Text = MyDataTable.Rows[0].ColumnIsNull("AnotherCol", "Doh! I'm null");

আমি প্রথমে কলামটির অস্তিত্বের জন্য যাচাই করছি কারণ যদি কোয়েরির ফলাফলগুলির কোনওটিতেই এই কলামটির জন্য একটি নন-মান থাকে না, তবে ডেটা টেবিল অবজেক্টটি that কলামটি সরবরাহ করবে না।


0

নীচে পদ্ধতি ব্যবহার করুন।

    /// <summary>
    /// Returns replacement value if expression is null
    /// </summary>
    /// <param name="expression"></param>
    /// <param name="replacement"></param>
    /// <returns></returns>
    public static long? IsNull(long? expression, long? replacement)
    {
        if (expression.HasValue)
            return expression;
        else
            return replacement;
    }

    /// <summary>
    /// Returns replacement value if expression is null
    /// </summary>
    /// <param name="expression"></param>
    /// <param name="replacement"></param>
    /// <returns></returns>
    public static string IsNull(string expression, string replacement)
    {
        if (string.IsNullOrWhiteSpace(expression))
            return replacement;
        else
            return expression;
    }

0
    public static T IsNull<T>(this T DefaultValue, T InsteadValue)
    {

        object obj="kk";

        if((object) DefaultValue == DBNull.Value)
        {
            obj = null;
        }

        if (obj==null || DefaultValue==null || DefaultValue.ToString()=="")
        {
            return InsteadValue;
        }
        else
        {
            return DefaultValue;
        }

    }

//This method can work with DBNull and null value. This method is question's answer

-10

এটি অর্থে রসিকতা হিসাবে বোঝানো হয়েছে, যেহেতু প্রশ্নটি মূর্খ।

public static bool IsNull (this System.Object o)
{
   return (o == null);
}

এটি একটি এক্সটেনশন পদ্ধতি, তবে এটি সিস্টেমকে প্রসারিত করে। অবজেক্ট, সুতরাং এখন আপনি যে প্রতিটি বস্তুর ব্যবহার করেন তার একটি ইসনুল () পদ্ধতি রয়েছে।

তারপরে আপনি এর মাধ্যমে অনেকগুলি কোড সংরক্ষণ করতে পারেন:

if (foo.IsNull())

সুপার খোঁড়া পরিবর্তে:

if (foo == null)

এটি প্রশ্নের উত্তর দেয় না।
এরিক শুনোভার

12
স্কাইল সার্ভারের ISNULL কী করে তা আপনি জানেন না, ফ্লাইওয়াত।
ক্লেকাবুম

1
হতে পারে এটি সি # তে আলাদাভাবে কাজ করে, তবে আমি ভিবিতে জানি এটি ওপি সম্পর্কে জিজ্ঞাসা করায় বস্তুটি শূন্য করার জন্য এটি কাজ করবে না। আমি নিজে চেষ্টা করেছিলাম। আমি কেবল সিস্টেম.অবজেক্টে এ জাতীয় এক্সটেনশন করেছি। সমস্যাটি হ'ল এক্সটেনশন পদ্ধতিতে কোন প্রকৃত Objectঅবজেক্টের প্রয়োজন হয় যার উপর চালিত হয় এবং যদি বস্তুটি কিছুই না হয় (অবশ্যই আপনি যে প্রশ্নটির জন্য এটি পরীক্ষা করার চেষ্টা করছেন) এক্সটেনশন ক্লাসটির কাজ করার কোনও উদাহরণ নেই এবং সুতরাং এটি ঘটবে একটি নুলবজেক্ট ব্যতিক্রম নিক্ষেপ করুন।
ইডিলন

@ আইডলন দেখে মনে হচ্ছে আপনি ভিবিতে কোনও এক্সটেনশন পদ্ধতি অ্যাক্সেস করতে পারবেন না Object। দেখুন এই তাই প্রশ্ন বা এই ব্লগ পোস্টে
26:55 '
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.