给定一个变体,VBScript是否有相当于C#的DateTime.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设置为已解析的值,或者根本不触摸它,而不是将其用作临时字段.
我需要将字符串"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
(我只需要日期和不关心的时间)?
如果输入为空,什么.NET
函数将转换为 aDateTime
但具有默认值?
例如。
DateTime dtTest = Convert.ToDateTime(getDateString());
Run Code Online (Sandbox Code Playgroud)
如果getDateString()
返回空字符串则Convert.ToDateTime
抛出异常。
我怎样才能使用默认值"9:00AM"
而不是空字符串?这是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) 我有以下代码
int varOut;
int.TryParse(txt1.Text, out varOut); // Here txt1.Text = 4286656181793660
Run Code Online (Sandbox Code Playgroud)
这里txt1.Text是JavaScript生成的随机16位数字,是一个整数.但是上面的代码总是返回false,即varOut值总是为零.
我在这做错了什么?
我目前正在重构代码以将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)
有什么想法,意见,替代我做过的事情?
这段代码有效,但效率低下,因为它重复查找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 参数的变量。
我有一些类似于以下的代码.
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#编译器的错误吗?
在下面的代码中,我给函数一个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",它总是会悲伤.有任何想法吗?