小编Mar*_*len的帖子

仅限Zip最新提交的更改

Git有一个非常方便的archive命令,它允许我在.zip存档中制作一个特定提交的副本,如下所示:

git archive -o ../latest.zip some-commit
Run Code Online (Sandbox Code Playgroud)

这将包含该提交的整个工作树.通常我只需要自上一版本以来更改过的文件.目前我使用它来将这些文件放入zip:

git diff --name-only previous-commit latest-commit | zip ../changes.zip -@
Run Code Online (Sandbox Code Playgroud)

但是,这将从我的工作副本中压缩文件,这可能有未提交的更改.有没有办法只获取已更改的文件,因为它们直接提交到拉链?

git bash

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

使用Dapper将字符串映射到guid

我正在使用Dapper来敲除一些需要访问PostgreSQL数据库的负载测试工具.PostgreSQL的这个特定版本本身不支持GUID,因此GUID值存储为32个字符串.使用someGuid.ToString("N")转换回Guid 的值,可以使用转换回Guid new Guid(stringValueFromColumn).

我的问题是如何让Dapper读取字符串并将其转换回Guids?

我尝试修改DbType映射,但这不起作用.

c# sql orm dapper

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

C#4.0,检测方法是否缺失

我有一种情况,我想将LinePragmas添加到CodeDom对象.但是一些代码dom对象具有LinePragma属性,而有些则没有.

所以我想知道是否可以使用dynamic关键字来检测对象上是否存在属性(不抛出异常),如果有,则添加pragma.这是我目前的方法:

public static T SetSource<T>(this T codeObject, INode sourceNode)
    where T : CodeObject
{
    codeObject.UserData["Node"] = sourceNode.Source;
    dynamic dynamicCodeObject = codeObject;

    // How can I not throw an exception here?
    if (dynamicCodeObject.LinePragma != null)
    {
        dynamicCodeObject.LinePragma = new CodeLinePragma(
        sourceNode.Source.Path.AbsoluteUri,
        sourceNode.Source.StartLine);
    }

    return codeObject;
}
Run Code Online (Sandbox Code Playgroud)

更新: 我使用的解决方案是添加一个名为Exists()的扩展方法.我在这里写了一篇关于它的博客文章: 成员存在动态C#4.0

jist是创建一个扩展方法,返回一个实现DynamicObject的TryGetMember的对象.它使用反射然后返回true或false.这允许你编写这样的代码:

object instance = new { Foo = "Hello World!" };
if (instance.Reflection().Exists().Foo)
{
    string value = instance.Reflection().Call().Foo;
    Console.WriteLine(value);
}
Run Code Online (Sandbox Code Playgroud)

c# codedom dynamic

7
推荐指数
2
解决办法
3316
查看次数

automapper可以生成url吗?

我希望automapper为视图模型生成URL.例如,这是我的数据对象:

public class User
{
  public int Id { get; set; }
  public int Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

视图模型看起来像这样:

public class UserListItem
{
  public string Name { get; set; }
  public string EditUrl { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望EditUrl使用为应用程序定义的路由生成属性.

像这样的东西:

listIten.EditUrl = Url.Action("Edit", "UserController", new { id = user.Id });
Run Code Online (Sandbox Code Playgroud)

似乎无法让AutoMapper执行此操作.没有RequestContext,UrlHelper或任何可用于映射表达式的东西,我在调用Mapper.Map时没有找到任何传递上下文的方法.

我错过了什么吗?或者首先想要做到这一点是一个坏主意?

更新:其他背景

我正在研究为MVC视图生成URL的替代方法,目的是使ASP.NET MVC应用程序维护尽可能简单.映射视图模型时生成URL是其中一种选择.它很容易测试和清理视图.在某些情况下,它还会促进视图的可重用性.在尝试这个想法时,我遇到了一个砖墙,AutoMapper无法接受任何类型的(动态)上下文Map操作.

c# asp.net-mvc automapper

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

C#:我应该使用或参考这个结构吗?

我不确定问这个问题的最好方法,所以我先从一个例子开始:

public static void ConvertPoint(ref Point point, View fromView, View toView) {
    //Convert Point
}
Run Code Online (Sandbox Code Playgroud)

这个调用是递归的.你传入一个点,它相对于它fromView是相对的toView(只要一个是另一个的祖先).

该调用是递归的,一次将该点转换为一个级别.我知道,可变结构是坏的,但我使用可变点的原因是我只需要创建一个单点并将其传递给递归调用,这就是为什么我使用ref.这是正确的方法,还是使用out参数更好,或者只是声明方法返回一个点?

在这些情况下,我不太熟悉如何处理结构体而不是类.这是从Java移植的代码,其中显然必须是一个类,因此有意义的是反复使用相同的临时点而不是创建一个必须在每次调用时被垃圾收集的新点.

这可能是一个令人困惑的问题,并且为了更多的混乱而堆积起来,当我在它时,我应该保留一个临时静态Point实例以进行快速转换,或者只要在调用此方法时创建新点就这么简单(它被称为很多)?

c# performance struct

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

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

在C#测试中有两个字符串[]和AreEqual的错误

我有ac #test方法的问题.

看起来像:

public void GetRolesTest()
{
    RoleProvider target = new RoleProvider(); 
    string username = "FOO"; 
    string[] expected = new string[2];
    expected[0] = "Admin";
    expected[1] = "User";
    string[] actual;
    actual = target.GetRoles(username);
    Assert.AreEqual<string[]>(expected, actual);
}
Run Code Online (Sandbox Code Playgroud)

测试的方法只做以下几点:

public override string[] GetRoles(string username)
{
    string[] output = new string[2];
    output[0] = "Admin";
    output[1] = "User";
    return output;
}
Run Code Online (Sandbox Code Playgroud)

运行测试后,我收到以下错误:

Error in "Assert.AreEqual". Expected:<System.String[]>. Acutally:<System.String[]>.
Run Code Online (Sandbox Code Playgroud)

可以sombody告诉我那里有什么问题?

c# unit-testing mstest

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