标签: tryparse

通用TryParse

我正在尝试创建一个通用扩展,使用'TryParse'来检查字符串是否是给定类型:

public static bool Is<T>(this string input)
{
    T notUsed;
    return T.TryParse(input, out notUsed);
}
Run Code Online (Sandbox Code Playgroud)

这将无法编译,因为它无法解析符号'TryParse'

据我了解,'TryParse'不是任何界面的一部分.

这有可能吗?

更新:

使用下面的答案,我想出了:

public static bool Is<T>(this string input)
{
    try
    {
        TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(input);
    }
    catch
    {
        return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

它运作得很好,但我认为以这种方式使用异常对我来说感觉不对.

UPDATE2:

修改为传递类型而不是使用泛型:

public static bool Is(this string input, Type targetType)
{
    try
    {
        TypeDescriptor.GetConverter(targetType).ConvertFromString(input);
        return true;
    }
    catch
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# generics tryparse

191
推荐指数
7
解决办法
7万
查看次数

Parse v.TrreadParse

Parse()和TryParse()有什么区别?

int number = int.Parse(textBoxNumber.Text);

// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);
Run Code Online (Sandbox Code Playgroud)

是否有某种形式的错误检查,如Try-Catch Block?

c# parsing integer tryparse

106
推荐指数
2
解决办法
10万
查看次数

DateTime.TryParse问题,日期为yyyy-dd-MM格式

我有以下日期的字符串格式"2011-29-01 12:00 am".现在我尝试使用以下代码将其转换为datetime格式:

DateTime.TryParse(dateTime, out dt); 
Run Code Online (Sandbox Code Playgroud)

但我总是在{1/1/0001 12:00:00 AM}获得dt,你能告诉我为什么吗?以及如何将该字符串转换为日期.

编辑:我刚看到提到的每个人都使用格式参数.我现在要提到我不能使用format参数,因为我有一些设置来选择用户想要的自定义dateformat,并且基于该用户能够通过jQuery datepicker自动以该格式获取文本框中的日期.

c# asp.net datetime date tryparse

73
推荐指数
3
解决办法
15万
查看次数

更好的是:int.TryParse或try {int.Parse()} catch

我知道......我知道......性能不是这里的主要关注点,但只是出于好奇,哪个更好?

bool parsed = int.TryParse(string, out num);
if (parsed)
...
Run Code Online (Sandbox Code Playgroud)

要么

try {
    int.Parse(string);
}
catch () {
    do something...
}
Run Code Online (Sandbox Code Playgroud)

.net c# parsing type-conversion tryparse

59
推荐指数
5
解决办法
4万
查看次数

对于任何数值,Enum.TryParse都返回true

在使用Enum.TryParse时,我遇到了一种我没想到的行为.

如果我有一个枚举:

public enum MyEnum
{
  ValueA,
  ValueB,
  ValueC
}
Run Code Online (Sandbox Code Playgroud)

然后我将一个数值(作为一个字符串)传递给Enum.TryParse,如:

MyEnum outputEnum;
bool result = Enum.TryParse("1234", out outputEnum);
Run Code Online (Sandbox Code Playgroud)

尽管字符串"1234"不是可能的值,但结果将返回true,而我的outputEnum将具有值1234.

有没有办法可以避免这种行为?我正在尝试编写一个函数,它将任意字符串输入作为枚举处理,这在我的错误输入检测中引发了一些麻烦.

c# validation enums tryparse

52
推荐指数
2
解决办法
8115
查看次数

你如何测试你的Request.QueryString []变量?

我经常使用Request.QueryString[]变量.

在我Page_load经常做的事情:

       int id = -1;

        if (Request.QueryString["id"] != null) {
            try
            {
                id = int.Parse(Request.QueryString["id"]);
            }
            catch
            {
                // deal with it
            }
        }

        DoSomethingSpectacularNow(id);
Run Code Online (Sandbox Code Playgroud)

这一切似乎有点笨拙和垃圾.你怎么处理你Request.QueryString[]的?

c# coding-style tryparse isnumeric request.querystring

50
推荐指数
6
解决办法
11万
查看次数

.NET 3.5中是否有GUID.TryParse()?

UPDATE

Guid.TryParse在.NET 4.0中可用

结束更新

显然,.NET CLR 2.0中没有公共GUID.TryParse().

所以,我正在寻找正则表达式[也称为google搜索一个],每次我发现其中有一个激烈的论点在评论部分关于RegEx A不起作用,使用RegEx B.然后有人会写Regex C yadda yadda

所以无论如何,我决定做的就是这个,但我对它感到很难过.

public static bool IsGuid (string possibleGuid) {

    try {
      Guid gid = new Guid(possibleGuid);
      return true;    
    } catch (Exception ex) {
      return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

显然我并不喜欢这个,因为从第一天开始我一直在钻我,以避免抛出异常,如果你可以防范代码.

有谁知道为什么.NET Framework中没有公共的Guid.TryParse()?

有没有人有一个真正的正则表达式,适用于所有GUID?

c# asp.net guid tryparse

49
推荐指数
5
解决办法
3万
查看次数

在C#中,如何检查字符串是否包含整数?

我只想知道,String变量是否包含可解析的正整数值.我现在不想解析这个值.

目前我在做:

int parsedId;
if (
    (String.IsNullOrEmpty(myStringVariable) ||
    (!uint.TryParse(myStringVariable, out parsedId))
)
{//..show error message}
Run Code Online (Sandbox Code Playgroud)

这很难看 - 如何更简洁?

注意:我知道扩展方法,但我想知道是否有内置的东西.

c# string parsing integer tryparse

36
推荐指数
5
解决办法
8万
查看次数

为什么所有TryParse重载都有out参数?

我发现很多次我不需要TryParse方法的out参数,但问题是必然的.在这里,我将展示一个不需要的例子.

我想检查字符串是否为整数,如果是整数则打印"整数"; 否则,打印"不是整数".所以这是代码:

string value = Console.ReadLine(); //Get a value from the user.
int num; //Why should I have it?? No need at all !

if (int.TryParse(value, out num))
{
    Console.WriteLine("An integer");
}
else
{
    Console.WriteLine("Not an integer");
}
Run Code Online (Sandbox Code Playgroud)

我只是想知道为什么TryParse总是返回一个out参数?为什么没有out参数就没有过载?

c# tryparse

36
推荐指数
3
解决办法
2万
查看次数

Integer.TryParse - 更好的方法?

我发现自己经常需要使用Integer.TryParse来测试值是否为整数.但是,当你使用TryParse时,你必须将一个引用变量传递给函数,所以我发现自己总是需要创建一个空白整数来传入.通常它看起来像:

Dim tempInt as Integer
If Integer.TryParse(myInt, tempInt) Then
Run Code Online (Sandbox Code Playgroud)

考虑到我想要的只是一个简单的真/假响应,我觉得这很麻烦.有没有更好的方法来解决这个问题?为什么没有一个重载函数,我可以传递我想要测试的值并获得真/假响应?

vb.net tryparse

33
推荐指数
3
解决办法
7万
查看次数