相关疑难解决方法(0)

MethodImpl(AggressiveInlining) - 它有多激进?

所以我稍微看了一下MethodImplAttribute,我遇到了MethodImplOptions.AggressiveInlining,它被描述为:

如果可能,应该内联该方法.

Oooooh,我心里想,这听起来很有趣 - 我可以假装我比编译器更聪明,强制代码只使用我的邪恶意志的力量和几个方括号,ha,ha,ha ...

因此,我启动了Visual Studio 2013,创建了一个控制台应用程序,将.NET版本设置为4.5.1并编写程序以结束所有程序(Release当然,在模式下编译它):

using System;
using System.Runtime.CompilerServices;

namespace ConsoleApplication1
{   
    public static class SoHelpful
    {
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public static int GetSomeValueProbablyTwelve()
        {
            return 12;
        }
        [MethodImpl(MethodImplOptions.NoInlining)]
        public static int GetSomeValueLikelyThirteen()
        {
            return 13;
        }
        public static int GetSomeValueMaybeItIsTwentyEight()
        {
            return 29;
        }
    }

    class Program
    {       
        static void Main()
        {
            int twelve = SoHelpful.GetSomeValueProbablyTwelve();
            int thirteen = SoHelpful.GetSomeValueLikelyThirteen();
            int twentyNine = SoHelpful.GetSomeValueMaybeItIsTwentyEight();
            Console.WriteLine((twelve + thirteen + twentyNine));
        }
    } …
Run Code Online (Sandbox Code Playgroud)

.net c#

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

检查枚举是否有任何共同的标志

考虑我有这个扩展方法:

public static bool HasAnyFlagInCommon(this System.Enum type, Enum value)
{
    var flags = value.ToString().Split(new string[] { ", " }, 
                                    StringSplitOptions.None);
    foreach (var flag in flags)
    {
        if (type.ToString() == flag)
            return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

以下情况:

[Flags]
enum Bla
{
    A = 0,
    B = 1,
    C = 2,
    D = 4
}

Bla foo = Bla.A | Bla.B;
Bla bar = Bla.A;

bar.HasAnyFlagInCommon(foo); //returns true
Run Code Online (Sandbox Code Playgroud)

我想检查foo是否有任何与bar相同的标志,但是在扩展方法中必须有更好的方法来实现这种行为.

我也尝试过这样,但总是返回true:

    public static bool HasAnyFlagInCommon(this System.Enum type, Enum value)
    {
        var flags …
Run Code Online (Sandbox Code Playgroud)

c# enums flags enum-flags

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

基于布尔值更改标志

有没有更优雅的方式这样做?

[Flags]
public enum SomeFlaggedEnum
{
    Value1 = 1,
    Value2 = 2,
    Value3 = 4
}


private SomeFlaggedEnum _myFlags;

public bool EnabledValue1
{
    set 
    {
        if (value)
        {
            _myFlags |= SomeFlaggedEnum.Value1;
        }
        else
        {
            _myFlags &= ~SomeFlaggedEnum.Value1;
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

我知道可能有一个简单的答案,我只是想一想......

编辑:如其中一个答案所指出的,枚举是不正确的.这只是在这个例子中,而不是在实际的代码中.

c# binary enums flags

5
推荐指数
2
解决办法
3075
查看次数

标签 统计

c# ×3

enums ×2

flags ×2

.net ×1

binary ×1

enum-flags ×1