标签: tryparse

VBScript是否具有DateTime.TryParse等价物?

给定一个变体,VBScript是否有相当于C#的DateTime.TryParse方法?

vbscript datetime variant tryparse

5
推荐指数
1
解决办法
4076
查看次数

Enum.TryParse - 它是线程安全的吗?

我试图弄清楚.NET 4.0的Enum.TryParse是否是线程安全的.

源代码(反编译)是:

[SecuritySafeCritical]
public static bool TryParse<TEnum>(string value, bool ignoreCase, out TEnum result) where TEnum : struct
{
    result = default(TEnum);   /// (*)
    Enum.EnumResult enumResult = default(Enum.EnumResult);
    enumResult.Init(false);
    bool result2;
    if (result2 = Enum.TryParseEnum(typeof(TEnum), value, ignoreCase, ref enumResult))
    {
        result = (TEnum)enumResult.parsedEnum;
    }
    return result2;
}
Run Code Online (Sandbox Code Playgroud)

对我来说似乎有问题的是这一行:

result = default(TEnum);   /// (*)
Run Code Online (Sandbox Code Playgroud)

如果另一个线程在将其设置为默认值之后,并且在将其设置为已解析值之前访问结果,该怎么办?

[编辑]按照Zoidberg的回答,我想稍微改一下这个问题.

问题是,我想,如果Enum.TryParse是"事务性的"(或原子的).

假设我有一个静态字段,并将其传递给Enum.TryParse:

public static SomeEnum MyField;
....
Enum.TryParse("Value", out MyField);
Run Code Online (Sandbox Code Playgroud)

现在,当执行TryParse时,另一个线程访问MyField.TryParse会将MyField的值更改为SomeEnum的默认值一段时间,然后才会将其设置为已解析的值.

这不一定是我的代码中的错误.我希望Enum.TryParse能够将MyField设置为已解析的值,或者根本不触摸它,而不是将其用作临时字段.

.net c# enums .net-4.0 tryparse

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

在C#中转换UTC日期/时间字符串

我需要将字符串"Fri Sep 11 00:00:00 GMT+04:00 2020"转换为DateTime对象11.09.2011.

我用的时候

DateTime result;
DateTime.TryParseExact(MyString, "ddd MMM dd HH:mm:ss 'GMT'zzz yyyy", 
    CultureInfo.InvariantCulture, DateTimeStyles.None, out result);
Run Code Online (Sandbox Code Playgroud)

result等于{9/10/2020 11:00:00 PM}.

我如何修改代码,以便日期组件11.09.2011没有 10.09.2011(我只需要日期和不关心的时间)?

c# tryparse

5
推荐指数
1
解决办法
4976
查看次数

如果输入为空,如何转换为 DateTime 但具有默认值?

如果输入为空,什么.NET函数将转换为 aDateTime但具有默认值?

例如。

DateTime dtTest = Convert.ToDateTime(getDateString());
Run Code Online (Sandbox Code Playgroud)

如果getDateString()返回空字符串则Convert.ToDateTime抛出异常。

我怎样才能使用默认值"9:00AM"而不是空字符串?这是TryParse可以使用的地方吗?

.net c# datetime tryparse

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

适用于所有数据类型的动态 TryParse

我需要检查一个对象是否可以转换为特定的数据类型,并想出了这个:

public static bool TryParseAll(System.Type typeToConvert, object valueToConvert)
{

    bool succeed = false;

    switch (typeToConvert.Name.ToUpper())
    {
        case "DOUBLE":
            double d;
            succeed = double.TryParse(valueToConvert.ToString(), out d);
            break;
        case "DATETIME":
            DateTime dt;
            succeed = DateTime.TryParse(valueToConvert.ToString(), out dt);
            break;
        case "INT16":
            Int16 i16;
            succeed = Int16.TryParse(valueToConvert.ToString(), out i16);
            break;
        case "INT":
            Int32 i32;
            succeed = Int32.TryParse(valueToConvert.ToString(), out i32);
            break;
        case "INT32":
            Int32 i322;
            succeed = Int32.TryParse(valueToConvert.ToString(), out i322);
            break;
        case "INT64":
            Int64 i64;
            succeed = Int64.TryParse(valueToConvert.ToString(), out i64);
            break;
        case "BOOLEAN":
            bool b; …
Run Code Online (Sandbox Code Playgroud)

c# types converter tryparse

5
推荐指数
1
解决办法
5211
查看次数

Int.TryParse()始终返回false

我有以下代码

 int varOut;
 int.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660  
Run Code Online (Sandbox Code Playgroud)

这里txt1.Text是JavaScript生成的随机16位数字,是一个整数.但是上面的代码总是返回false,即varOut值总是为零.

我在这做错了什么?

c# int32 tryparse

5
推荐指数
1
解决办法
2170
查看次数

使用TryParse设置对象属性值

我目前正在重构代码以将Convert.To替换为TryParse.

我遇到了以下一些代码,它们创建并为对象分配属性.

List<Person> list = new List<Person>();

foreach (DataRow row in dt.Rows)
{
     var p = new Person{ RecordID = Convert.ToInt32(row["ContactID"]) };

     list.Add(p);
}
Run Code Online (Sandbox Code Playgroud)

我作为替代品提出的是:

var p = new Person { RecordID = Int32.TryParse(row["ContactID"].ToString(), out RecordID) ? RecordID : RecordID };
Run Code Online (Sandbox Code Playgroud)

有什么想法,意见,替代我做过的事情?

c# refactoring exception tryparse

4
推荐指数
1
解决办法
4858
查看次数

在 LINQ 中使用 TryGetValue()?

这段代码有效,但效率低下,因为它重复查找ignored字典。如何TryGetValue()在 LINQ 语句中使用字典方法使其更高效?

IDictionary<int, DateTime> records = ...

IDictionary<int, ISet<DateTime>> ignored = ...

var result = from r in records
             where !ignored.ContainsKey(r.Key) ||
             !ignored[r.Key].Contains(r.Value)
             select r;
Run Code Online (Sandbox Code Playgroud)

问题是我不确定如何在 LINQ 语句中声明一个用于 out 参数的变量。

linq tryparse out-parameters trygetvalue c#-4.0

4
推荐指数
2
解决办法
6855
查看次数

LINQ,输出参数和"使用未分配的局部变量"错误

我有一些类似于以下的代码.

class MyClass<TEnum> where TEnum : struct
{
    public IEnumerable<TEnum> Roles { get; protected set; }

    public MyClass()
    {
        IEnumerable<string> roles = ... ;

        TEnum value;
        Roles = from r in roles
                where Enum.TryParse(r, out value)
                select value;   // <---- ERROR HERE!
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在上面指出的行上,我收到错误:

使用未分配的局部变量'value'

在我看来,value总是会在这种情况下初始化,因为它是一个out参数Enum.TryParse.

这是C#编译器的错误吗?

c# linq tryparse

4
推荐指数
2
解决办法
351
查看次数

为什么DateTime.TryParse在给出实际年份字符串时返回false?

在下面的代码中,我给函数一个sTransactionDate ="1999",我试图将它转换为日期x/x/1999.

DateTime dTransactionDate = new DateTime();
if(DateTime.TryParse(sTransactionDate, out dTransactionDate))
{ //Happy 
}else
{ //Sad 
}
Run Code Online (Sandbox Code Playgroud)

如果字符串是"1999",它总是会悲伤.有任何想法吗?

.net c# datetime tryparse

3
推荐指数
1
解决办法
3467
查看次数