[英]How to get variable name in catch block?
在這里,我分配了多個string
變量,但我想捕獲哪個變量及其名稱的錯誤。
try
{
sSrNo = Convert.ToString(valueArrayCustomerDetails[row, 1]);
sNotice_No = (string)valueArrayCustomerDetails[row, 2];
dt_notice_date = Convert.ToDateTime(valueArrayCustomerDetails[row, 3]);
sAgreement_No = Convert.ToString(valueArrayCustomerDetails[row, 4]);
sBorrower = (string)valueArrayCustomerDetails[row, 5];
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString() + "\n Error At :- Row-" + row + " Column-"); // here i want variable name at which error occurs
throw;
}
好吧,如果你想要這些信息,你必須使用多個 try-catch:
try
{
sSrNo = Convert.ToString(valueArrayCustomerDetails[row, 1]);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString() + "\n Error At :- Row-" + row + " 1");
throw;
}
try
{
sNotice_No = (string)valueArrayCustomerDetails[row, 2];
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString() + "\n Error At :- Row-" + row + " 2");
throw;
}
// ...
另一種選擇是創建一個像這樣的輔助方法:
public static class Utils
{
public static T TryDo<T>(Func<T> returnMethod, Action<Exception> exceptionAction = null, bool throwOnException = true, T fallbackValue = default(T))
{
try
{
return returnMethod();
}catch(Exception ex)
{
exceptionAction(ex);
if(throwOnException)
{
throw;
}
}
return fallbackValue;
}
}
現在你可以使用這個簡潔易讀的代碼:
sSrNo = Utils.TryDo(() => Convert.ToString(valueArrayCustomerDetails[row, 1]), ex => MessageBox.Show(GetMessage(ex, row, 1)));
sNotice_No = Utils.TryDo(() => Convert.ToString(valueArrayCustomerDetails[row, 2]), ex => MessageBox.Show(GetMessage(ex, row, 2)));
dt_notice_date = Utils.TryDo(() => Convert.ToDateTime(valueArrayCustomerDetails[row, 3]), ex => MessageBox.Show(GetMessage(ex, row, 3)));
sAgreement_No = Utils.TryDo(() => Convert.ToString(valueArrayCustomerDetails[row, 4]), ex => MessageBox.Show(GetMessage(ex, row, 4)));
sBorrower = Utils.TryDo(() => Convert.ToString(valueArrayCustomerDetails[row, 5]), ex => MessageBox.Show(GetMessage(ex, row, 5)));
// local method
string GetMessage(Exception ex, int row, int col)
=> $"{ex.ToString()} Error At :- Row-{row} Column-{col}";
嘗試使用這個:
它將給出拋出異常的行號,從而獲取變量。
catch(Exception ex)
{
var LineNumber = new StackTrace(ex, true).GetFrame(0).GetFileLineNumber();
MessageBox.Show(ex.StackTrace + "\n Error at :- Row-" + LineNumber);
}
ex.StackTrace 給出了詳細的錯誤信息。
string index="1";
try
{
sSrNo = Convert.ToString(valueArrayCustomerDetails[row, 1]);
index="2";
sNotice_No = (string)valueArrayCustomerDetails[row, 2];
index="3";
dt_notice_date =
Convert.ToDateTime(valueArrayCustomerDetails[row, 3]);
index="4";
sAgreement_No =
Convert.ToString(valueArrayCustomerDetails[row, 4]);
index="5";
sBorrower = (string)valueArrayCustomerDetails[row, 5];
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString() + "\n Error At :- Row-" + row + "
Column-"+index); // here i want variable name at which error occurs
throw;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.