如何比较具有多个位设置的枚举?我一定很遗憾.
我有一个枚举的目标持久值,我有相同枚举的用户设置.我需要比较两者以查看是否存在一个或多个枚举位的单个匹配.
额外奖励:我很乐意在这里使用按位运算符来快捷查询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) 我写了几十种扩展方法,它们都按预期工作.但这是我第一次在这种情况下使用扩展方法.
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) 我是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) 如何管道多行变量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 ...变量,并多次解析它.