কীভাবে আমি ভিজুয়াল স্টুডিওতে "[কিছু ঘটনা] কখনও ব্যবহৃত হয়নি" সংকলক সতর্কতাগুলি থেকে মুক্তি পাব?


95

উদাহরণস্বরূপ, আমি এই সংকলক সতর্কতা পেয়েছি,

ইভেন্ট 'Company.SomeControl.S SearchClick' কখনও ব্যবহার করা হয় না।

তবে আমি জানি যে এটি ব্যবহার করা হয়েছে কারণ এটি মন্তব্য করার ফলে এক্সএএমএল পৃষ্ঠাগুলির 20 টি নতুন সতর্কতা যা এই ইভেন্টটি ব্যবহার করার চেষ্টা করছে!

কি দেয়? এই সতর্কতা থেকে মুক্তি পাওয়ার জন্য কী কৌশল আছে?


4
আপনি একটি উদাহরণ পোস্ট করতে পারেন?
জন স্যান্ডার্স 16

উত্তর:


148

এটি 67 কে সতর্ক করে বলে মনে হচ্ছে এবং তাই এটি দিয়ে দমন করা যেতে পারে:

#pragma warning disable 67

এটিকে যত তাড়াতাড়ি সম্ভব পুনরুদ্ধার করতে ভুলবেন না (ইভেন্টের ঘোষণার পরে) এর সাথে:

#pragma warning restore 67

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

এর রয়েছে একটি আকর্ষণীয় নিবন্ধ এই সতর্কবার্তা সম্পর্কে এবং বিশেষভাবে কিভাবে এটি ইন্টারফেসগুলি ক্ষেত্রে প্রযোজ্য হয়; "অব্যবহৃত" ইভেন্টগুলি কীভাবে মোকাবেলা করা যায় সে সম্পর্কে একটি ভাল পরামর্শ রয়েছে। গুরুত্বপূর্ণ অংশগুলি হ'ল:

সঠিক উত্তরটি হ'ল এই ইভেন্ট থেকে আপনি কী প্রত্যাশা করছেন সে সম্পর্কে স্পষ্ট হওয়া, যা এই ক্ষেত্রে কিছুই নয়:

public event EventHandler Unimportant
{
    add { }
    remove { }
}

এটি সতর্কতার সাথে পরিষ্কারভাবে দমন করবে, সেইসাথে একটি সাধারণ ইভেন্টের অতিরিক্ত সংকলক-উত্পাদিত বাস্তবায়ন। এবং অন্য একটি অতিরিক্ত সুবিধা হিসাবে, এটি এই কাজ-কিছুই বাস্তবায়ন সর্বোত্তম বাস্তবায়ন কিনা তা নিয়ে ভাবতে অনুরোধ করে। উদাহরণস্বরূপ, ইভেন্টটি যদি অসমর্থিত হিসাবে এতটা গুরুত্বহীন না হয়, যেমন কার্যকরীতার উপর নির্ভর করে এমন ক্লায়েন্টরা এটি ছাড়া ব্যর্থ হওয়ার সম্ভাবনা থাকে তবে স্পষ্টভাবে সমর্থনটির অভাবকে ইঙ্গিত করা এবং একটি ছুঁড়ে দিয়ে দ্রুত ব্যর্থ হওয়া আরও ভাল be ব্যতিক্রম:

public event EventHandler Unsupported
{
    add { throw new NotSupportedException(); }
    remove { }
}

অবশ্যই, একটি ইন্টারফেস যা কার্যকরীতার কিছু অংশ ছাড়াই কার্যকরভাবে প্রয়োগ করা যেতে পারে তা কখনও কখনও ইঙ্গিত দেয় যে ইন্টারফেসটি অনুকূলভাবে সংহত নয় এবং পৃথক ইন্টারফেসে বিভক্ত হওয়া উচিত।


এটাই আমার দরকার! ধন্যবাদ! পার্থক্যটি হ'ল আমি 67 এর পাশে আমার নিজস্ব মন্তব্য যুক্ত করেছি তাই আমি জানতাম ভবিষ্যতে এটি কী। এখানে আমি যা টাইপ করেছি তার "হুবহু" ... # প্রাগমা সতর্কতা 67 কে অক্ষম করুন // ইভেন্ট কখনই জনসাধারণের ইভেন্ট ব্যবহার করেনি রুটেডএভেন্টহ্যান্ডলার অনুসন্ধান ক্লিক; #
প্রগমা

12
এটি একটি দুর্দান্ত লিঙ্ক। ধন্যবাদ
ম্যাক্স পামার

এটি দরকারী; জায়গায় রাখতে যাচ্ছি না, তবে বর্তমান ধারণাটি চালানোর জন্য কেবল কিছু ...
dudeNumber4

78

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

public event EventHandler CanExecuteChanged { add{} remove{} }

আমি যদি এটি করি তবে এটি ফাইলের পরে বলবে যেখানে আমি এটি করি if(OnCompleteOpenEvent != null) OnCompleteOpenEvent();যে "অনকম্পিউডইভেন্ট বর্তমান প্রসঙ্গে নেই"।
অ্যালমো

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

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

খুব উন্মাদজনক পরিস্থিতির এই সহজ সমাধানের জন্য আপনাকে অনেক ধন্যবাদ!
এম 463

16

দ্বিতীয় সর্বোত্তম উপায়টি হ'ল ইমোটি স্পষ্টভাবে বলা যে ইভেন্টটি যদি কেউ এটির সদস্যতা নেওয়ার চেষ্টা করে তবে একটি ব্যতিক্রম ছুঁড়ে সাপোর্ট করা হয় না।

public event RoutedEventHandler SearchClick
{
    add { throw new NotSupportedException(); }
    remove { throw new NotSupportedException(); }
}

এর বৈকল্পিক হিসাবে, আপনি ইভেন্টটিতে সাবস্ক্রিপশন চুপচাপ উপেক্ষা করার জন্য কেবল পদ্ধতি addএবং removeপদ্ধতিগুলি খালি রেখে দিতে পারেন।

কোডটির রিফ্যাক্টর সবচেয়ে ভাল সমাধান হ'ল সম্ভব হলে ইভেন্টের ঘোষণাটি বাস্তবায়নকারীকে টানুন।

শেষ অবলম্বন হিসাবে আপনি সতর্কতাটিও অক্ষম করতে পারেন

#pragma warning disable 67
public event RoutedEventHandler SearchClick;
#pragma warning restore 67

আমি দেখতে পাচ্ছি না কিভাবে নাল বস্তু এখানে প্রাসঙ্গিক
vidstige

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

আমি জানি নাল বস্তু কী। আমি বিশ্বাস করি যে এই ব্যবহারের কেসটি আমার শেষ অনুচ্ছেদে আচ্ছাদিত।
vidstige


1

সংকলকটি দৃশ্যত সচেতন নয় যে এটি XAML কোডে ব্যবহৃত হচ্ছে। আপনার ইভেন্ট সংজ্ঞাতে সতর্কতা দমন করার চেষ্টা করুন।

এছাড়াও, নিশ্চিত হয়ে নিন যে আপনি আসলে ইভেন্টটি কোথাও তুলছেন।


এটি আমিও ভেবেছিলাম, তাই আমি XAML কোডটি পেছনের কোডটিতে সরিয়ে নিয়েছি এবং এটি একই সতর্কতা দেখিয়েছে! এবং হ্যাঁ, আমি 100% নিশ্চিত যে ঘটনাটি কোথাও উত্থাপিত হচ্ছে। আমি এটি ঠিক তাকান। এটি একটি বোতামে তারযুক্ত
jedmao

1

আপনি স্বতন্ত্র সতর্কতাগুলি দমন করতে পারেন।

\Program.cs(13,20): warning CS0219: The variable 'foo' is assigned but its value is never used

এই ক্ষেত্রে, CS0219 হ'ল ভেরিয়েবলগুলি নির্ধারিত হলেও ব্যবহৃত হচ্ছে না সম্পর্কিত সতর্কতা। আপনি হয় / নরনার: 0219 পতাকাটি ব্যবহার করতে পারেন, বা প্রকল্পের জন্য বৈশিষ্ট্য ফলকে ত্রুটি নম্বর যুক্ত করতে পারেন ("বিল্ড" এর অধীনে, নেতৃস্থানীয় সিএস অপসারণ করতে ভুলবেন না)। এই শ্রেণীর সমস্ত সতর্কতাগুলি মনে রাখবেন resses


1

অথবা আপনি <NoWarn>67</NoWarn>আপনার প্রকল্পে যুক্ত করতে পারেন

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <NoWarn>67</NoWarn>
</PropertyGroup>

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