我有一个从数据库中填充的列表。列表的格式如下:
class Event
{
public int EventID { get; set; }
public string EventName { get; set; }
public string EventManager { get; set; }
public int EventManagerID { get; set; }
public string EventTicketID { get; set; }
}
class Manager
{
public int ManagerID { get; set; }
public string ManagerName { get; set; }
public string ManagerShortName { get; set; }
public bool IsActive { get; set; }
}
EventTicketID通常由整数填充。但有时,ticketID也有字符串。当事件管理器分包给另一个管理公司时,会发生这种情况,在这种情况下,EventTicketId的格式为ManagerShortName_TicketID。我想知道检查事件是否与事件管理员签订合同或是否与子管理员签订合同。所以我想检查EventTickedId是否为整数或者是否包含字符串。
我尝试使用以下方法进行检查:
//EventList being populated from db in an instance of List<Event> called listEvents
int directContractTicketID = Convert.ToInt32(listEvent[0].EventTicketID);
但我得到了未处理的异常。谁能告诉我如何检查EventTicketId是字符串还是整数?
答案 0 :(得分:6)
使用int.TryParse
如果值可解析为true
,则会返回int
,否则为false
。如果返回值为false
,则可以安全地假设该字符串包含一些非数字值。
int directContractTicketID;
if (int.TryParse(listEvent[0].EventTicketID, out directContractTicketID))
{
// valid int value, parsed value in directContractTicketID
}
else
{
// listEvent[0].EventTicketID contains some non-numeric value
}
答案 1 :(得分:3)
Convert.ToInt32
实际上会调用int.Parse
,如果字符串无效,则会抛出int.TryParse
。因此,您的未处理异常。
最好使用int parsedTicket;
if (int.TryParse(listEvent[0].EventTicketID, out parsedTicket))
{
//Value is held in parsedTicket
}
else
{
//Ticket was not a number, parsedTicket is 0.
}
:
{{1}}
答案 2 :(得分:2)
您必须了解这些功能的使用。
Convert.toInt32
用于转换为整数类型。它不应该用于检查值是否为整数。
Int.TryParse
是专为此目的而设计的功能。检查给定值是否为整数。
同样,C#中的所有内置类型都有TryParse
方法。
希望这有帮助!!!
答案 3 :(得分:1)
您可以使用数字不允许下划线的事实来确定这是否是ManagerShortName_TicketID
的简单数字:
bool isSubcontracted = ticketId.Contains("_");
如果要解析普通数字和转包项目的故障单标识符,可以这样做:
int ticketNumber;
string subcontractor = null;
string[] tokens = ticketId.Split('_');
if (tokens.Length == 2) {
subcontractor = tokens[0];
ticketNumber = int.ParseInt(tokens[1]);
} else {
ticketNumber = int.ParseInt(tokens[0]);
}