所以我稍微看了一下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));
        }
    } …考虑我有这个扩展方法:
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;
}
以下情况:
[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
我想检查foo是否有任何与bar相同的标志,但是在扩展方法中必须有更好的方法来实现这种行为.
我也尝试过这样,但总是返回true:
    public static bool HasAnyFlagInCommon(this System.Enum type, Enum value)
    {
        var flags …有没有更优雅的方式这样做?
[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;
        }
    }
} 
我知道可能有一个简单的答案,我只是想一想......
编辑:如其中一个答案所指出的,枚举是不正确的.这只是在这个例子中,而不是在实际的代码中.