.ToLookup<TSource, TKey>返回一个ILookup<TKey, TSource>.ILookup<TKey, TSource>还实现了接口IEnumerable<IGrouping<TKey, TSource>>.
.GroupBy<TSource, TKey>返回一个IEnumerable<IGrouping<Tkey, TSource>>.
ILookup具有方便的索引器属性,因此它可以以字典(或类似查找)的方式使用,而GroupBy则不能.GroupBy没有索引器是一种痛苦的工作; 几乎是你可以引用返回对象的唯一方法是循环它(或使用另一个LINQ扩展方法).换句话说,任何GroupBy工作的情况下,ToLookup也会起作用.
这一切让我想到为什么我会打扰GroupBy?为什么要存在?
只是好奇:为什么C#中的try catch语法(Java也?)为多个语句硬编码?为什么语言不允许:
int i;
string s = DateTime.Now.Seconds % 2 == 1 ? "1" : "not 1";
try
i = int.Parse(s);
catch
i = 0;
Run Code Online (Sandbox Code Playgroud)
这个例子只是为了琐碎的目的.我知道有int.TryParse.
如果在操作方法中有模型绑定参数,那么如何在操作过滤器中获取该参数?
[MyActionFilter]
public ActionResult Edit(Car myCar)
{
...
}
public class MyActionFilterAttribute : ActionFilterAttribute
{
public void OnActionExecuted(ActionExecutedContext filterContext)
{
//I want to access myCar here
}
}
Run Code Online (Sandbox Code Playgroud)
反正有没有通过Form变量获取myCar?
尝试运行以下代码时:
Expression<Func<string, string>> stringExpression = Expression.Lambda<Func<string, string>>(
Expression.Add(
stringParam,
Expression.Constant("A")
),
new List<ParameterExpression>() { stringParam }
);
string AB = stringExpression.Compile()("B");
Run Code Online (Sandbox Code Playgroud)
我得到标题中引用的错误:"没有为类型'System.String'和'System.String'定义二进制运算符Add." 那是真的吗?显然在C#中它起作用.是做string s = "A" + "B"在C#中的特殊语法糖,表达编译器不具有访问权限?
我正在寻找将整个方法转换为表达式树的能力.写出来会很糟糕.:)
所以(琐碎的例子)给出以下文字:
public static int Add(int a, int b)
{
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
我想获得一个代表这个的内存中对象,或者下面的文本:
ParameterExpression a = Expression.Parameter(typeof(int), "a");
ParameterExpression b = Expression.Parameter(typeof(int), "b");
var expectedExpression = Expression.Lambda<Func<int, int, int>>(
Expression.Add(a,b),
a,
b
);
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?有没有人可以与Roslyn做点什么呢?
编辑:澄清:我想把任何C#方法(例如,上面的方法)作为文本,并产生一个结果表达式.基本上我正在寻找将任何给定的C#方法编译到表达式树中.
我有一组可更改的子组件(POJO 对象),每个组件都有自己的状态流。每次用户触发 addChild/removeChild/clearChildren 时,都会使用 #switchMap 发出一组新的子状态流。到目前为止,一切都很好!(对 RxJS 感到非常惊讶!)
只要不是空数组Rx.Observable.from(arrayOfStateStreams).combineAll(),我就能得到很好的结果。arrayOfStateStreams
由于这是在更高级别上组合(最新)的部分状态,因此我需要发出一个空数组,否则全局状态树将包含不再正确的旧状态数据!
我可以发出一些保留令牌,例如['EMPTY-ARRAY-PLACEHOLDER-TOKEN'],但这很奇怪。更好的方法是始终将最后一个流附加到数组中,因此最后一个索引可以被视为垃圾。但仍然令人困惑的代码和状态。使用[null]是不行的,因为我们可能有一个子状态'null'.
谁能用好的方法解决这个问题?因为#combineAll 之后不应该有其他空数组的表示,所以不能支持这一点吗?
git 是否有某种 URL 方案允许您直接引用某个版本中的特定文件?例子:
在此 URL 中,我们基本上有 [协议]://[存储库位置]/blob/[版本哈希]/[文件路径]
我假设这个链接方案是 GitHub 编写的,而不是可以在其他地方使用的东西。鉴于此,我可以在 git 的非 GitHub 实现上使用类似的东西吗?就像是:
git://[存储库位置]/[版本哈希]/[文件路径] ?
我知道我可以根据版本哈希和文件路径以编程方式查找它,但我对 URL 提供的简单引用能力更感兴趣。
我正在尝试使用libgit2sharp以获取文件的先前版本.我希望工作目录保持原样,至少恢复到以前的状态.
我最初的方法是尝试存储,检查我想要的文件的路径,将其保存到字符串变量,然后存储弹出窗口.有没有办法存放流行音乐?我很难找到它.这是我到目前为止的代码:
using (var repo = new Repository(DirectoryPath, null))
{
var currentCommit = repo.Head.Tip.Sha;
var commit = repo.Commits.Where(c => c.Sha == commitHash).FirstOrDefault();
if (commit == null)
return null;
var sn = "Stash Name";
var now = new DateTimeOffset(DateTime.Now);
var diffCount = repo.Diff.Compare().Count();
if(diffCount > 0)
repo.Stashes.Add(new Signature(sn, "x@y.com", now), options: StashModifiers.Default);
repo.CheckoutPaths(commit.Sha, new List<string>{ path }, CheckoutModifiers.None, null, null);
var fileText = File.ReadAllText(path);
repo.CheckoutPaths(currentCommit, new List<string>{path}, CheckoutModifiers.None, null, null);
if(diffCount > 0)
; // stash Pop?
}
Run Code Online (Sandbox Code Playgroud)
如果有一种比使用Stash更简单的方法,那也会很有效.
我有 2 个事件流: 1. 鼠标拖放事件流(拖动开始...拖动结束...拖动开始...拖动结束) 2.按键事件流('a' ... ' b' .... 'c' .... 'd')
我需要合并到一个仅包含第二个流中的事件(因此仅包含按键)的流中,但它需要过滤掉拖动开始和拖动结束之间发生的所有按键(最后一个除外)。
所以如果来源是这样的:
... Start ............... End .............. Start .............. End
Run Code Online (Sandbox Code Playgroud)
和
...........'a'...'b'...'c'.......'d'...'e'..........'f'....'g'.......
Run Code Online (Sandbox Code Playgroud)
结果应该是这样的:
...........................'c'...'d'...'e'..........................'g'
Run Code Online (Sandbox Code Playgroud)
在 C# 中使用 Rx.net 可以实现类似的功能吗?
可以说我有以下内容:
public interface IFoo
{
void Foo();
}
public interface IBar
{
void Bar();
}
public class FooAndBar : IFoo, IBar
{
//valid implementation
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个类在构造函数中接受IFoo和IBar,但是也有一个无参数的构造函数.
public class Consumer
{
private IFoo foo;
private IBar bar;
public Consumer(IFoo foo, IBar bar)
{
this.foo = foo;
this.bar = bar;
}
public Consumer() : this(new FooAndBar(), new FooAndBar()) {}
}
Run Code Online (Sandbox Code Playgroud)
我想维护调用参数化版本的无参数构造函数之间的关系.但我想传入一个引用的对象,而不是"新"两个FooAndBar实例.无论如何还要保持构造函数之间的关系吗?
我们遇到了一些构建错误,我们需要手动修复引用.我想以编程方式检查项目引用是否已定义而不是dll引用:因此,请查看解决方案中的所有引用以及每个项目,检查引用是否已正确定义.这样就可以正确配置相关的依赖项.
有人知道现有的解决方案吗?我想要一个在门控签到之前运行的验证工具.