2016-10-16 10 views
5

मैं स्थानीय या तत्काल विंडो से यह "मान" चर नहीं बदल सकता। क्या गलत है? टी रनटाइम में int नहीं है? Whats wrong?स्थानीय विंडो में टी प्रकार int बदलना

http://im2.ezgif.com/tmp/ezgif-3735159626.gif

मैं _value है.मैं नहीं बदल सकते हैं लगता है कि यह एक बग या कुछ और है?

class Program 
    { 
     static void Main(string[] args) 
     { 
      Just<int> just = new Just<int>(); 
      just.Try(5); 
     } 
    } 
    class Just<T> 
    { 
     private T _value; 
     public void Try(T value) 
     { 
      this._value = value; 
     } 
    } 

इस का उपयोग कर के अलावा,, बस के उदाहरण का उपयोग करने की कोशिश की काम ठीक

enter image description here

+0

मेरे लिए ठीक काम करता है (वीएस 2013)। आप कौन सा संस्करण उपयोग कर रहे हैं? – Rob

+0

वीएस समुदाय 2015 (14.0.25425.01 अद्यतन 3) – Cevizli

+0

मैं वीएस 2015 पेशेवर में इस त्रुटि को पुन: उत्पन्न करने में सक्षम था। –

उत्तर

2

यह अभिव्यक्ति मूल्यांकनकर्ता में एक ज्ञात बग है। इस बग को ट्रैक करने वाला गिटहब मुद्दा है here

0

यह त्रुटि "सामान्य" है। ऐसा लगता है, डिबगर मूल्य है कि आप T = int के रूप में दर्ज है, लेकिन बस के रूप में int (यह डिबगर है कि यह एक int उम्मीद पर लिखा है) नहीं मिलता है, और फिर कोशिश करता है अपने intT कन्वर्ट करने के लिए। भले ही Tint टाइप करें, यह रूपांतरण को पूरी तरह से नहीं कर सकता है (आमतौर पर आपको इस तरह की त्रुटियों को हल करने के लिए अपना मूल्य डालना होगा), यह आपके कोड को संकलित करने के लिए उपयोग की जाने वाली वही कॉन्फ़िगरेशन के साथ फ्लाई पर अपना मान पुन: संकलित कर सकता है । और इस कॉन्फ़िगरेशन में value टाइप T = unknown है, T = int नहीं।

मुझे लगता है कि फ्लाई पर मूल्य बदलना वास्तव में रनटाइम की तरह काम नहीं करता है। क्योंकि रनटाइम पर, T = int
इस पद्धति में (किसी व्यक्ति ने कहा कि बेहतर मुझ से संकलक/डिबगर के व्यवहार से अवगत है, हो सकता है, आपको जानकारी यहाँ क्या हो रहा है में समझा सकता है।)


लेकिन जैसे :

public void Try(int value) 
{ 
    // With _value as T 
    _value = value; 
} 

आप एक ही त्रुटि संदेश (और इसे संकलित करने में सक्षम नहीं) के साथ समाप्त हो जाएगा।

त्रुटि CS0029 परोक्ष 'टी'


के प्रकार 'int' कनवर्ट नहीं कर सकता लेकिन आप मूल्य के रूप में अपने डीबगर में इस टाइप करता है, तो (अपने विधि के लिए):

(T)(object)10 // Or whatever your int value is 

या (जो आपको वास्तव में टालना चाहिए) से ऊपर परीक्षण विधि के लिए:

_value = (T)(object)value; 

यह काम करता है, मान बदल जाता है। (जब तक आपका मान T प्रकार नहीं है)
आपने स्पष्ट रूप से int को T में रूपांतरित कर दिया है।


कुछ भी गलत नहीं, यह सामान्य रूपांतरण त्रुटि के लिए एक मानक गैर-जेनेरिक है।

संबंधित मुद्दे