일반 속성을 사용하여 Session에서 'long'값을 가져 왔는데 충돌이 발생했습니다. C#에서 긴 개체를 캐스팅 할 수 있습니까?
그래서 내가 가진 :public static T Get<T>(string key)
{
if(...)
return (T)System.Web.HttpContext.Current.Session[key];
...
}
디버깅, 값은 4이며,이 충돌합니다.
일반 속성을 사용하여 Session에서 'long'값을 가져 왔는데 충돌이 발생했습니다. C#에서 긴 개체를 캐스팅 할 수 있습니까?
그래서 내가 가진 :public static T Get<T>(string key)
{
if(...)
return (T)System.Web.HttpContext.Current.Session[key];
...
}
디버깅, 값은 4이며,이 충돌합니다.
, 당신은 Convert.ChangeType()를 사용할 수 있습니다
long n = Get<long>("sessionkey");
: 전화를 할 수
public static T Get<T>(string key)
{
if (...)
return
(T) Convert.ChangeType(System.Web.HttpContext.Current.Session[key],
typeof(T));
...
}
그러나 조심하십시오 : 모든 변환에 대해 Convert.ChangeType()이 작동하지 않습니다. 어디에 문제가
정확하게 작동하지 않는 것은 무엇입니까? 그래서 기본적으로 Session의 값에 대한 일반적인 getter는 모든 유형에서 '안전하게'수행 될 수 없습니다. – Blankman
한 유형에서 다른 유형으로 변환 할 수있는 경우 Convert.ChangeType()이 작동합니다. 그러나 문자열을 int로 변환하면 작동하지 않습니다. 설명서는 http://msdn.microsoft.com/en-us/library/dtb69x08.aspx –
에서 찾을 수 있지만 int로 변환하는 문자열은 Convert에서 작동합니다.ToInt32 ("23"); 나는이 물건을 얻지 못한다. – Blankman
사용 Convert.ToInt64
당신이 당신의 일반적인 방법을 유지를 주장하는 경우그래서, 여기에 : 당신은 (세션에있는 동안) 당신이 긴에 그것을 언 박싱하려고하는 객체로 박스있어 소수 (100m)을했고,이 곳이다
그 일은 팬을 때렸다. 변경에만 참조 인 경우, 개체의 값이 절대로 변경되지 여기object o="string";
string s=(string) o
, 그것이 예전의 "문자열": .NET에서
캐스트 연산자는 실제로 두 가지를 수행합니다. 그러나, 내가 할 때 실제로 물건의 본질을 변경하고
double d= 3.7;
long l = (long) x;
에서, d
및 l
이 같은 표현이없는, 하나는 3.7의 값을 부동 소수점 이중 폭이며, 다른 하나는 값이 3 인 64 비트 정수입니다.
.net 연산자는이 두 가지를 모두 수행 할 수 있지만 동시에 처리하지 않을 수도 있습니다.
decimal d=4m;
object o = d;
long l1 = (long)o; //blows up, the runtime error you got
long l2 = (decimal)o; //compile time error
long l3 = (long)(decimal)o; //first we unbox, then we convert - works
BTW, 마스터의 뻔뻔한 찢음 (here for more and better explanations)
길다는 것은 int이고 int가 아닌가? 그러면 캐스팅이 중단됩니다. GetType()을 호출합니다. 값의 이름으로 항목의 실제 유형을 봅니다. – SWeko
예 해당 int 값은 4입니다. (위 참조) – Blankman
왜 4를 길게 캐스트 할 수 없는지 저는 이해가 가지 않습니다? – Blankman