我试图追加谓词和我的目标是创建相同的表达式:
Services.Where(s => s.Name == "Modules" && s.Namespace == "Namespace");
Run Code Online (Sandbox Code Playgroud)
我有以下代码:
Expression<Func<Service,string>> sel1 = s => s.Name;
Expression<Func<Service,string>> sel2 = s => s.Namespace;
var val1 = Expression.Constant("Modules");
var val2 = Expression.Constant("Namespace");
Expression e1 = Expression.Equal(sel1.Body, val1);
Expression e2 = Expression.Equal(sel2.Body, val2);
var andExp = Expression.AndAlso(e1, e2);
ParameterExpression argParam = Expression.Parameter(typeof(string), "s");
var lambda = Expression.Lambda<Func<string, bool>>(andExp, argParam);
Run Code Online (Sandbox Code Playgroud)
这将创建以下输出:
s => ((s.Name == "Modules") AndAlso (s.Namespace == "Namespace"))
Run Code Online (Sandbox Code Playgroud)
但是,这是错误的,因为Name和Namespace的参数不相同.如果我将其中一个表达式选择器更改为:
Expression<Func<Service,string>> sel2 = srv => srv.Namespace;
Run Code Online (Sandbox Code Playgroud)
输出将是:
s …
Run Code Online (Sandbox Code Playgroud) 我目前正在重写一些单元测试以使用NUnit 3而不是NUnit 2,并且需要将一些断言更改为基于约束的断言.我有以下断言:
Assert.IsNullOrEmpty(result);
Run Code Online (Sandbox Code Playgroud)
我改为:
Assert.That(result, Is.Null.Or.Empty);
Run Code Online (Sandbox Code Playgroud)
但是,断言时我对可读性并不完全满意IsNotNullOrEmpty
:
Assert.That(result, Is.Not.Null.And.Not.Empty);
Run Code Online (Sandbox Code Playgroud)
我目前的建议是创建以下静态类:
public static class Text
{
public static EmptyConstraint IsNullOrEmpty => Is.Null.Or.Empty;
public static EmptyConstraint IsNotNullOrEmpty => Is.Not.Null.And.Not.Empty;
}
Run Code Online (Sandbox Code Playgroud)
用法:
Assert.That(result, Text.IsNotNullOrEmpty);
Run Code Online (Sandbox Code Playgroud)
这提供了更好的可读性,但代价是引入了自定义约束.是否存在制定相同断言的标准方法,还是应该继续使用Is.Not.Null.And.Not.Empty
?
我想定义一个xml架构,其中元素Connectors具有0-*子元素.序列,关联或消息的任何顺序和0到多次.即
<Connectors>
<Sequence />
<Association />
<Message />
<Sequence />
<Sequence />
<Message />
<Message />
<Association />
</Connectors>
Run Code Online (Sandbox Code Playgroud)
我试图定义以下架构,但似乎订单是固定的.
<xs:element name="Connectors">
<xs:complexType>
<xs:sequence>
<xs:element ref="Association" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="Message" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="Sequence" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud) 我正在构建一些Linq Expression并尝试获取MethodInfo IEnumerable.DefaultIfEmpty
(http://msdn.microsoft.com/en-us/library/bb360179.aspx).什么似乎是一个简单的任务,但我不知道它为什么不工作.
typeof(Enumerable).GetMethod("DefaultIfEmpty", new[] { typeof(IEnumerable<>) });
typeof(Enumerable).GetMethod("DefaultIfEmpty", new[] { typeof(IEnumerable<>).MakeGenericType(typeof(WorkitemListModel)) });
Run Code Online (Sandbox Code Playgroud) 我有一个HTML格式的字符串(1-3 of 3 Trip)如何获得数字3(在旅行前)并将其转换为int.我想将它用作计数
找到这个代码
public static string GetNumberFromStr(string str)
{
str = str.Trim();
Match m = Regex.Match(str, @"^[\+\-]?\d*\.?[Ee]?[\+\-]?\d*$");
return (m.Value);
}
Run Code Online (Sandbox Code Playgroud)
但它只能获得1个数字
我是LINQ的新手.
我想查询描述列字符串的所有行(示例值"我今天感觉很幸运.")包含/匹配a中的任何项目List<string> lst
.
列表项的示例包含{"lucky","bad","ok"}.
我想通过只使用linq实现,但我混淆了以下方法正确吗?
谢谢.
选项1:
var item =
from a in datatbl.AsEnumerable()
from b in lst
where a.Field<string>("description").contains(b)
select a;
选项2:
var item =
from a in datatbl.AsEnumerable()
where lst.Any(x=> a.Field<string>("description").Contains(x))
select a;
我对 C# 和任务的最佳实践有点困惑。
当我学习 C# 和任务时,它总是一个等待任务的异步函数。但最近我做了一些研究,发现有些人的说法并非如此。他们还表示,限制 async 和 wait 的使用可以提高性能和 RAM 使用率。
例如,在这篇 Stackoverflow 文章中,它说您不应该总是等待每个任务,但该示例不适用于 ASP.NET API,并且没有任何以前的数据用于获取新数据。 这篇文章也赞成不要总是等待每项任务。但这个例子又是一个正在传递的简单任务。
所以我的问题是当有另一个任务必须等待第二个任务时。您可以使用.Result
还是我们使用 async/await 更好。因为我听说.Result
正在阻塞当前线程。但我看不出当前线程如何不会被等待阻塞,因为第二个语句需要第一个语句的输出。
没有异步/等待的示例
public Task<User> SaveUser(User user)
{
var dbUser = _userRepository.GetByUid(user.Id).Result;
if(dbUser == null) {
dbUser = new User();
dbUser.Id = Guid.NewGuid();
}
dbUser.Name = user.Name;
return _userRepository.Save(dbUser);
}
Run Code Online (Sandbox Code Playgroud)
异步/等待示例
public async Task<User> SaveUser(User user)
{
var dbUser = await _userRepository.GetByUid(user.Id);
if(dbUser == null) {
dbUser = new User();
dbUser.Id = Guid.NewGuid();
} …
Run Code Online (Sandbox Code Playgroud) c# ×6
linq ×2
asp.net-core ×1
async-await ×1
methodinfo ×1
nunit ×1
nunit-3.0 ×1
reflection ×1
regex ×1
unit-testing ×1
xml ×1
xsd ×1