জেনেরিক টাইপ বা পদ্ধতিতে প্যারামিটার টি হিসাবে এটি ব্যবহার করতে 'স্ট্রিং' টাইপটি অবশ্যই একটি নন-নোলযোগ্য টাইপ হতে হবে 'সিস্টেম.নুবিহীন <T>'


172

কেন আমি ত্রুটি পেতে পারি "জেনেরিক টাইপ বা পদ্ধতিতে 'সিস্টেম.নুবলযোগ্য'" প্যারামিটার 'টি' হিসাবে এটি ব্যবহার করতে 'টাইপ' স্ট্রিংটি একটি নন-অ-মানযোগ্য টাইপ হতে হবে?

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using Universe;

namespace Universe
{
    public class clsdictionary
    {
      private string? m_Word = "";
      private string? m_Meaning = "";

      string? Word { 
          get { return m_Word; }
          set { m_Word = value; }
      }

      string? Meaning { 
          get { return m_Meaning; }
          set { m_Meaning = value; }
      }
    }
}

21
Stringইতিমধ্যে nlalable হয়।
এমব্যাবকক

উত্তর:


204

আপনার কোডের সমস্ত জায়গায় stringপরিবর্তে ব্যবহার করুন string?

Nullable<T>টাইপ প্রয়োজন যে টি নন-nullable মান টাইপ, উদাহরণস্বরূপ হয় intবা DateTime। রেফারেন্সের ধরণগুলি stringইতিমধ্যে নাল হতে পারে। এমন জিনিসগুলিকে অনুমতি দেওয়াতে কোনও লাভ হবে না Nullable<string>যাতে এটি অনুমোদিত নয়।

এছাড়াও আপনি যদি সি # 3.0 ব্যবহার করেন বা তারপরে আপনি স্বতঃ-প্রয়োগকৃত বৈশিষ্ট্যগুলি ব্যবহার করে আপনার কোডটি সহজ করতে পারেন :

public class WordAndMeaning
{
    public string Word { get; set; }
    public string Meaning { get; set; }
}

1
এমব্যাবকক, আমি যখন মি_ ওয়ার্ড = নাল করি, এটি ত্রুটি করে, কোনও পরামর্শ? আমি শব্দটি নাল হতে সেট করতে সক্ষম হতে চাই।
বিবিধ ব্যবহারকারীর

1
@ মিসিল্লেনিয়াস ইউজার: আপনি কোন ত্রুটি বার্তা পাবেন? আপনি যে সঠিক ফাইলটি সংকলনের চেষ্টা করেছিলেন তা কি পোস্ট করতে পারেন? আপনার কোডের একটি মাত্র লাইন দেখে আপনার ভুলটি কী তা অনুমান করা শক্ত। আমার অর্থ এটি হতে পারে যে আপনি একটি আধা-কোলন মিস করছেন ... তবে সম্ভবত আপনি কেবল অনুলিপি করতে + এটি আটকাতে ভুলে গেছেন ... আপনি কোডটি সংকলনের চেষ্টা না করা পর্যন্ত এটি অনুমান করা ছাড়া কিছুই নয়।
মার্ক বাইয়ার্স

সহায়তার জন্য ধন্যবাদ, এই পোস্টিং stackoverflow.com/questions/187406/… দেখেছি এবং দেখতে পারে যে প্রশ্ন চিহ্নটি কেবলমাত্র মূল্য ধরণের জন্য।
বিবিধ ব্যবহারকারীর

@ বিবিধ ব্যবহারকারী: এটি কেবল "মান ধরণের জন্য" নয়। এটি অবশ্যই একটি নন-অযোগ্য মান ধরণের হতে হবে। ঠিক তেমনি ত্রুটি বার্তাটি বলে।
মার্ক বাইয়ার্স

1
হিহ, কিছুক্ষণের জন্য সুইফট প্রোগ্রামিং করার পরে, এটি একটি সি # প্রকল্পে আমার সেরা পেয়েছে।
অ্যালবার্ট বোরি

52

stringএকটি রেফারেন্স টাইপ, একটি বর্গ। আপনি কেবল ব্যবহার করতে পারেন Nullable<T>বা T?সি-সিনট্যাকটিক চিনির সাথে অ- মূল্যহীন মান ধরণের যেমন intএবং Guid

বিশেষত, যেমন stringএকটি রেফারেন্স টাইপ, টাইপের একটি এক্সপ্রেশন stringইতিমধ্যে শূন্য হতে পারে:

string lookMaNoText = null;

15

System.String (মূলধন এস সহ) ইতিমধ্যে অযোগ্য, আপনার এটির মতো ঘোষণা করার দরকার নেই।

(string? myStr) ভূল.


বড় বড় অক্ষরের গুরুত্ব তুলে ধরতে আপনার উত্তরটিতে ছোট সম্পাদনা করুন। আমি সি # তে নতুন এবং এই সামান্য পার্থক্যটি পেতে আমাকে চিরতরে লেগেছিল।
বি - রিয়ান

4

খুব নির্দিষ্ট কারণে টাইপ করুন Nullable<int>আপনার কর্সারটি নুলযোগ্য এবং এফ 12-এ চাপুন - মেটাডেটা কারণটি সরবরাহ করে (কাঠামোর সীমাবদ্ধতাটি নোট করুন):

public struct Nullable<T> where T : struct
{
...
}

http://msdn.microsoft.com/en-us/library/d5x73970.aspx


4
যদিও এটি স্ট্রাক্ট Nullable<Nullable<int>>হলেও Nullable<int>তা অনুমোদিত নয় Note
মার্ক বাইয়ার্স

ইহা আকর্ষণীয়. এটি কি "হার্ড-কোডড" সংকলকটিতে রয়েছে? এটি কীভাবে কোনও নির্দিষ্ট কাঠামো থেকে আবদ্ধ হয় (নালাম <নলেবল <... >>)? - সম্পাদনা আমি এখন দেখছি আপাতদৃষ্টিতে এটি বিশেষ - সংকলন ত্রুটি ... অবশ্যই একটি নন-অযোগ্য মান ধরণের হতে হবে ....
জোশুয়া এনফিল্ড

4

দয়া করে মনে রাখবেন যে সি # এর আসন্ন সংস্করণে 8 টি, উত্তরগুলি সত্য নয়।

All the reference types are non-nullable by default এবং আপনি আসলে নিম্নলিখিতটি করতে পারেন:

public string? MyNullableString; 
this.MyNullableString = null; //Valid

যাহোক,

public string MyNonNullableString; 
this.MyNonNullableString = null; //Not Valid and you'll receive compiler warning. 

এখানে গুরুত্বপূর্ণ বিষয়টি হল আপনার কোডের অভিপ্রায় দেখানো। যদি "উদ্দেশ্য" হ'ল রেফারেন্স প্রকারটি নালার হতে পারে, তবে এটি চিহ্নিত করুন সুতরাং অন্যথায় শুল্কহীনকে নাল মান নির্ধারণের ফলে সংকলক সতর্কতা হতে পারে।

অধিক তথ্য

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.