小编edu*_*911的帖子

比较两个枚举w/bitwise单个True结果?

如何比较具有多个位设置的枚举?我一定很遗憾.

我有一个枚举的目标持久值,我有相同枚举的用户设置.我需要比较两者以查看是否存在一个或多个枚举位的单个匹配.

额外奖励:我很乐意在这里使用按位运算符来快捷查询linq(因为我在不同的属性中复制了5到6次).我知道它不易读,但它确实有助于我正在做的事情.

public enum Targets
{
  NotSet = 0,

  Anonymous = 1,
  Everyone = 2
  Adult = 4,
  Child = 8,

  LikesFishing = 16
}
Run Code Online (Sandbox Code Playgroud)

我有多个目标设置的用户:

var loggedInUser = new User()
{
  Username = "eduncan911",
  Targets = Targets.Everyone | Targets.Adult | Targets.LikesFishing
};    
Run Code Online (Sandbox Code Playgroud)

我有多个不同目标的文章:

var article1 = new Article()
{
  Title = "Announcement for Parents and Children",
  Targets = Targets.Adult | Targets.Child
};

var article2 = new Article()
{
  Title = "What fishing boat do you own?",
  Targets = …
Run Code Online (Sandbox Code Playgroud)

c# enums bit-manipulation bitwise-operators

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

为什么我必须使用"this"从扩展类中调用扩展方法?

我写了几十种扩展方法,它们都按预期工作.但这是我第一次在这种情况下使用扩展方法.

public static class ControllerExtensions
{
    public static RedirectToRouteResult RedirectToAction<TController>(
        this Controller controller
        , Expression<Action<TController>> action
      ) where TController : Controller
    {
      RouteValueDictionary routeValuesFromExpression = 
        ExpressionHelper.GetRouteValuesFromExpression<TController>(action);

      return new RedirectToRouteResult(routeValuesFromExpression);
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来很正常吧?但在我的控制器中,我无法通过键入来访问此扩展方法.相反,我必须在前面添加关键字"this".例如:

// This does not work, I get a compiler error because
// RedirectToAction has no overload for the generic.
//
return
  RedirectToAction<MembershipController>(
     c => c.RegisterSuccess(Server.UrlEncode(code) ));

// But, this does work?!?!
//
return
  this.RedirectToAction<MembershipController>(
     c => c.RegisterSuccess(Server.UrlEncode(code) ));
Run Code Online (Sandbox Code Playgroud)

很奇怪.也许是因为我在我正在扩展的实例对象中?"控制器"实例是什么?

果然,我能够在一个简单的控制台应用程序中复制它:

class Program
{
    static void Main(string[] args)
    { …
Run Code Online (Sandbox Code Playgroud)

.net extension-methods

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

使用GO解析XML属性

我是GO的新手,我无法从XML文档中提取属性值.下面的代码产生以下输出:

应用程序ID ::""应用程序名称::""

我的假设是,当涉及到如何使用标记时,我遗漏了一些东西,如果有人能指出我正确的方向,我会非常感激.

data:=`<?xml version="1.0" encoding="UTF-8"?>
    <applist>
        <app app_id="1234" app_name="abc"/>
    <app app_id="5678" app_name="def"/>
    </applist> `

type App struct {
    app_id   string  `xml:"app_id,attr"`
    app_name string  `xml:"app_name"`
}

type AppList struct {
    XMLName xml.Name `xml:"applist"`
    Apps  []App      `xml:"app"`
}

var portfolio AppList
err := xml.Unmarshal([]byte(data), &portfolio)
if err != nil {
    fmt.Printf("error: %v", err)
    return
}
fmt.Printf("application ID:: %q\n", portfolio.Apps[0].app_id)
fmt.Printf("application name:: %q\n", portfolio.Apps[0].app_name)
Run Code Online (Sandbox Code Playgroud)

xml go

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

Echo multiline var to Grep

如何管道多行变量grep并保留换行符?

预期成绩:

$ git status --porcelain --branch
## test-branch
M  image.go
 M item.go
?? addme.go
?? testdata/
$ git status --porcelain --branch | grep -c '^??'
2
Run Code Online (Sandbox Code Playgroud)

"2"就是答案.

但是在脚本中(或者只是输入命令),我无法$x从下面解析它.

$ x="$(git status --porcelain --branch)"
$ y="$(echo $x | grep -c '^??')"
$ echo "$y"
0
Run Code Online (Sandbox Code Playgroud)

我怀疑它是如何$(echo $x ...y变量赋值中回应的.

编辑:我只执行x="$(git status --porcelain --branch)"一次,并使用多个grep命令解析它几十次,用于各种输出,值,计数,状态,分支,后备,前进和其他值.因此,我需要将输出分配给git status ...变量,并多次解析它.

variables bash grep

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