小的有一支api 然後因為有一些需求需要調整
程式碼如下
if (一些邏輯判斷)
{
//傳入參數處理
string A = HttpUtility.HtmlEncode(body.A),
B = HttpUtility.HtmlEncode(body.B),
C = HttpUtility.HtmlEncode(body.C),
D = HttpUtility.HtmlEncode(body.D);
///A解碼:
A = HttpUtility.UrlDecode(EncandDec_Extensions.Dec_AES(A, AESKey, null));
bool result = int.TryParse(A, out int a);
if (result)
{
//這邊是調整需求加上的
var rs = (from r in _db.Register
join m in _db.Member on r.company_code equals m.Company_Code
where r.serno == a
select new
{
m.AccountID
}).FirstOrDefault();
}
}
我這次的疑惑點是
前面幾行根本沒有更動過
但在我加上了我新的code之後
當我才一進到
string A = HttpUtility.HtmlEncode(body.A)
第一行這邊
我就看到visual studio下面會顯示每個參數值的地方
已經出現 a
擲回 'System.NullReferenceException' 類型的例外狀況int {System.NullReferenceException}
想當然爾到
bool result = int.TryParse(A, out int a);
就直接噴錯了
但我拔掉我新增的code
a就可以正確被解析是 0
小的非常困惑
後來權宜之計是寫了一個
int a = 0;
在我的
if (一些邏輯判斷)
的外面
才得以解決
但我還是很想知道究竟為什麼會這樣
小的寫code 經歷不長,還望各位大神指教~萬分感激
string A = HttpUtility.HtmlEncode(body.A)
是 System.NullReferenceException
表示 HttpUtility.HtmlEncode(body.A) = null
若要防null錯誤~可以加上空字串~
string A = HttpUtility.HtmlEncode(body.A) + "";
這樣都會是空字串~而不是 Null 值
亦即
//傳入參數處理
string A = HttpUtility.HtmlEncode(body.A) + "",
B = HttpUtility.HtmlEncode(body.B) + "",
C = HttpUtility.HtmlEncode(body.C) + "",
D = HttpUtility.HtmlEncode(body.D) + "";
感謝大大的回答,可能我表達不清楚
string A = HttpUtility.HtmlEncode(body.A)
這一串是可以正確被執行完的
而我的body.A 也一定會有值
因為我自己用postman打我都會給值進去~
可是他是
out int a
的這個小寫a
在一進這個方法時
(也就是string A = HttpUtility.HtmlEncode(body.A) 這行
上面的if只是一些驗證)
就是null
正常應該要是0才對
後來把宣告放在最外面才解決
int a = 0;
if(....)
{
bool result = int.TryParse(A, out a);
}
恩~這個就照可以解決的方式來處理~
這些細節問題~都是出錯後~用一些調整才修正好。
感覺就只是版本問題吧 ?
GTP :
在C#中,使用 out 变量的内联声明(例如 out int a)是从 C# 7.0 版本开始引入的。在这之前,你必须在调用 int.TryParse 之前显式地声明 a 变量。
先感謝你的回答
不過我內文也有提到
我原本寫法都沒有更動過
是後來新增了幾行DB的操作之後
才開始會有這個錯誤的~
抱歉我眼瞎!
話說可以貼個 System.NullReferenceException 訊息的圖嗎!
沒見過
bool result = int.TryParse(A, out int a);
這段出錯的樣子