小编Shl*_*omo的帖子

为什么ToLookup和GroupBy不同?

.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# linq

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

为什么Try-Catch需要花括号

只是好奇:为什么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.

c# try-catch

52
推荐指数
4
解决办法
5279
查看次数

ASP.NET MVC ActionFilter参数绑定

如果在操作方法中有模型绑定参数,那么如何在操作过滤器中获取该参数?

[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?

asp.net-mvc action-filter

13
推荐指数
1
解决办法
5422
查看次数

"没有为类型'System.String'和'System.String'定义二进制运算符Add." - 真的吗?

尝试运行以下代码时:

    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#中的特殊语法糖,表达编译器不具有访问权限?

c# expression-trees

13
推荐指数
2
解决办法
5011
查看次数

寻找C#=> Linq Expression编译器

我正在寻找将整个方法转换为表达式树的能力.写出来会很糟糕.:)

所以(琐碎的例子)给出以下文字:

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#方法编译到表达式树中.

c# expression-trees roslyn

7
推荐指数
1
解决办法
1206
查看次数

mergeAll 不会在空数组上发出

JSBIN样本

我有一组可更改的子组件(POJO 对象),每个组件都有自己的状态流。每次用户触发 addChild/removeChild/clearChildren 时,都会使用 #switchMap 发出一组新的子状态流。到目前为止,一切都很好!(对 RxJS 感到非常惊讶!)

只要不是空数组Rx.Observable.from(arrayOfStateStreams).combineAll(),我就能得到很好的结果。arrayOfStateStreams

由于这是在更高级别上组合(最新)的部分状态,因此我需要发出一个空数组,否则全局状态树将包含不再正确的旧状态数据!

我可以发出一些保留令牌,例如['EMPTY-ARRAY-PLACEHOLDER-TOKEN'],但这很奇怪。更好的方法是始终将最后一个流附加到数组中,因此最后一个索引可以被视为垃圾。但仍然令人困惑的代码和状态。使用[null]是不行的,因为我们可能有一个子状态'null'.

谁能用好的方法解决这个问题?因为#combineAll 之后不应该有其他空数组的表示,所以不能支持这一点吗?

reactive-extensions-js rxjs rxjs5

6
推荐指数
1
解决办法
3416
查看次数

git 是否提供了直接引用文件版本的 URL 方案?

git 是否有某种 URL 方案允许您直接引用某个版本中的特定文件?例子:

https://github.com/libgit2/libgit2/blob/5aee96329ab7869cbe90cf80fd2a3f8f4dc5dccf/include/git2/branch.h

在此 URL 中,我们基本上有 [协议]://[存储库位置]/blob/[版本哈希]/[文件路径]

我假设这个链接方案是 GitHub 编写的,而不是可以在其他地方使用的东西。鉴于此,我可以在 git 的非 GitHub 实现上使用类似的东西吗?就像是:

git://[存储库位置]/[版本哈希]/[文件路径] ?

我知道我可以根据版本哈希和文件路径以编程方式查找它,但我对 URL 提供的简单引用能力更感兴趣。

git

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

如何使用libgit2sharp获取以前版本的文件

我正在尝试使用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更简单的方法,那也会很有效.

c# libgit2sharp

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

T4模板空白控件

是否有任何命令可以轻松控制T4模板输出空白?我得到了一些过度的标签.我以为我记得一种控制模板空白的方法......

t4

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

在 Rx.Net 中去抖直到

我有 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 可以实现类似的功能吗?

reactive-programming system.reactive rx.net

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

重载的构造函数多次传递相同的引用

可以说我有以下内容:

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实例.无论如何还要保持构造函数之间的关系吗?

c#

2
推荐指数
1
解决办法
153
查看次数

c# - 如何以编程方式检查解决方案中是否正确配置了引用

我们遇到了一些构建错误,我们需要手动修复引用.我想以编程方式检查项目引用是否已定义而不是dll引用:因此,请查看解决方案中的所有引用以及每个项目,检查引用是否已正确定义.这样就可以正确配置相关的依赖项.

有人知道现有的解决方案吗?我想要一个在门控签到之前运行的验证工具.

c# msbuild dll reference csproj

2
推荐指数
1
解决办法
1953
查看次数