2016-10-27 2 views
3

私はnullable int []とstringを持っています。stringが数値かどうかをチェックしてnullable intに代入する方法?

string someStr = "123"; 

int? siteNumber = null; 
string siteName= null; 

ある時点で、文字列が数字かどうかを確認する必要があります。この目的のために

私はこのしようと試み:

if (int.TryParse(someStr, out siteNumber)) 
    { } 
else 
    siteName = siteDescription; 

をしかしsiteNumberがNULL可能であるので、私はこのエラーを取得する:文字列が数値であり、それがある場合、私がする必要がある場合

cannot convert from 'out int?' to 'out int' 

はどのようにして確認することができますnullable intに代入しますか?

+0

http://stackoverflow.com/questions/3390750/how-to-use-int-tryparse-with-nullable-intの –

+1

可能な重複[NULL可能int型に文字列を解析する方法](HTTP ://stackoverflow.com/questions/45030/how-to-parse-a-string-into-a-nullable-int) – HimBromBeere

答えて

4

これを行うカスタムメソッドを記述できます。

public int? TryParseNullableValues(string val) 
{ 
    int outValue; 
    return int.TryParse(val, out outValue) ? (int?)outValue : null; 
} 
4

outパラメータの種類が完全に一致する必要があるため、中間変数を使用できます。

int siteNumberTemp; 
if (int.TryParse(someStr, out siteNumberTemp)) 
{ 
    siteNumber = siteNumberTemp; 
} 
else 
    siteName = siteDescription; 
0

out引数の型が正確にパラメータと一致しているので、あなたは、別の変数を使用せずにこれを行うことはできません。

string someStr = "123"; 
int? siteNumber = null; 

int tmp; 
if (!int.TryParse(someStr.Trim(), out tmp)) 
{ 
    //Do something if not parsed 
} 
else 
{ 
    siteNumber = tmp; 
} 
0

最も良い方法は、この関数を使用してnullを許可するかどうかにかかわらず文字列をintに変換することです。このカスタム関数はそれを処理します。

public static Int32? CustomConvertToInt32(Object obj) 
{ 
    string _strData = CustomConvertToStringOrNull(obj); 

    Int32? _Nullable = null; 
    Int32 _data; 

    if (Int32.TryParse(_strData, out _data)) 
    { 
     _Nullable = _data; 
    } 
    return _Nullable; 
} 

public static string CustomConvertToStringOrNull(Object obj) 
    { 
     string _Nullable = null; 
     if (obj != null) 
     { 
      if (obj.ToString().Trim() == "" || obj.ToString().Trim().ToLower() == "n/a") 
      { 
       _Nullable = null; 
      } 
      else 
      { 
       _Nullable = obj.ToString().Trim(); 
      } 
     } 

     return _Nullable; 
    } 


int? siteNumber = CustomConvertToInt32(someStr); 
関連する問題