我想要做的是这样的:我有枚举标记值的枚举.
public static class EnumExtension
{
public static bool IsSet<T>( this T input, T matchTo )
where T:enum //the constraint I want that doesn't exist in C#3
{
return (input & matchTo) != 0;
}
}
Run Code Online (Sandbox Code Playgroud)
那么我可以这样做:
MyEnum tester = MyEnum.FlagA | MyEnum.FlagB
if( tester.IsSet( MyEnum.FlagA ) )
//act on flag a
Run Code Online (Sandbox Code Playgroud)
不幸的是,C#的通用,其中约束没有枚举限制,只有类和结构.C#不会将枚举视为结构(即使它们是值类型),因此我无法像这样添加扩展类型.
有没有人知道解决方法?
我试图为此刷新GCC手册页,但仍然没有得到它,真的.
-march和之间有什么区别-mtune?
什么时候才使用-march,而不是两者兼而有之?是否有可能只是-mtune?
我用了:
getWindow().addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)
如何恢复默认状态(不保持)?
目前我正在开始一个新的,Activity并呼吁finish当前的.
是否有任何可以传递给Intent它的标志,可以在Activity不需要finish从代码中手动调用的情况下完成当前的操作?
我在我的应用程序中使用Enum标志.Enum可以有大约50个以上的值,因此值可以达到2 ^ 50.我只是想知道,我可以用它Math.Pow(2, variable)来计算这些吗?
当我尝试这样做时,我得到一个恒定值的编译时错误.有没有其他方法,除了手动计算2的这些权力并将其放入?
这就是我在做的事情:
[Flags]
internal enum RiskStates : long
{
None = 0,
AL = Convert.ToInt64(Math.Pow(2,0)),
AK = 2,
AZ = 4,
AR = 8,
CA = 16,
CO = 32,
CT = 64,
DC = 128,
DE = 256,
FL = 512,
GA = 1024,
HI = 2048,
ID = 4096,
IL = 8192,
IN = 16384,
IA = 32768,
KS = 65536,
KY = 131072,
LA = 262144,
ME = 524288, …Run Code Online (Sandbox Code Playgroud) 仅出于测试目的,我允许通过URL下载和安装我的应用APK.下载到手机上后,可以使用Android应用安装程序启动它,用户可以选择将其安装到自己的设备上然后再运行.
考虑我们是否以上述方式下载并运行应用程序.我的应用中的主/启动器活动是登录页面(Activity A).一旦用户被认证,他们就被带到应用程序的主要区域,例如Activity B.所以现在这个任务的当前活动堆栈是A > B.
然后我按下手机上的主页按钮,然后进入Android主屏幕.我通过菜单中的图标重新启动我的应用程序,我被带到了Activity A,而不是Activity B.活动堆栈现在是A > B > A,或者现在有两个单独的任务与活动堆栈A > B,A分别.我想要的是Activity B在我重新启动应用程序时被收回.在这种状态下按回来将带我回去Activity B.
如果我首先通过安装程序打开应用程序,而不是通过主屏幕/菜单打开应用程序,则只会发生这种不良行为.
我研究了各机制如何开展活动.当我们使用app安装程序时,我们会看到以下日志:
INFO/ActivityManager(XXXX): Starting activity: Intent { dat=file:///mnt/sdcard/download/[my app].apk cmp=com.android.packageinstaller/.InstallAppProgress (has extras) }
INFO/ActivityManager(XXXX): Starting activity: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=[my package]/[Activity A] }
Run Code Online (Sandbox Code Playgroud)
通过发射器/主屏幕:
INFO/ActivityManager(XXXX): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=[my package]/[Activity A] }
Run Code Online (Sandbox Code Playgroud)
当使用安装程序启动时,我们看到它正在使用标志0x10000000,但是当启动器启动时,我们看到它正在使用0x10200000.它也使用意图类别.
从 …
我需要在Javascript中模拟枚举类型,方法看起来非常简单:
var MyEnum = {Left = 1; Right = 2; Top = 4; Bottom = 8}
Run Code Online (Sandbox Code Playgroud)
现在,在C#中我可以将这些值组合起来:
MyEnum left_right = MyEnum.Left | MyEnum.Right
Run Code Online (Sandbox Code Playgroud)
然后我可以测试枚举是否具有一定的价值:
if (left_right & MyEnum.Left == MyEnum.Left) {...}
Run Code Online (Sandbox Code Playgroud)
我可以在Javascript中做类似的事情吗?
我有标志位的问题.我有一个int变量来保存标志.首先,我为该变量设置了一些标志.后来我需要检查该变量中设置了多少个标志.但我不知道这样做.
我如何打开一个设置了flags属性的枚举(或更精确地用于位操作)?
我希望能够在与所声明的值匹配的开关中击中所有情况.
问题是,如果我有以下枚举
[Flags()]public enum CheckType
{
Form = 1,
QueryString = 2,
TempData = 4,
}
Run Code Online (Sandbox Code Playgroud)
我想用这样的开关
switch(theCheckType)
{
case CheckType.Form:
DoSomething(/*Some type of collection is passed */);
break;
case CheckType.QueryString:
DoSomethingElse(/*Some other type of collection is passed */);
break;
case CheckType.TempData
DoWhatever(/*Some different type of collection is passed */);
break;
}
Run Code Online (Sandbox Code Playgroud)
如果"theCheckType"设置为CheckType.Form | CheckType.TempData我希望它能同时击中两个案例.显然,由于中断,它不会在我的示例中同时出现,但除此之外它也会失败,因为CheckType.Form不等于CheckType.Form | CheckType.TempData
那么我能看到的唯一解决方案就是为每个可能的枚举值组合做一个案例?
就像是
case CheckType.Form | CheckType.TempData:
DoSomething(/*Some type of collection is passed */);
DoWhatever(/*Some different type of collection is passed */);
break; …Run Code Online (Sandbox Code Playgroud) 我发现我们可以使用酷炫的标志来滚动工具栏甚至内容layout_scrollFlags.就我而言,我有这样的布局:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="snap"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
我的标签之一是fragment与它的版面Recycle View与edittext该RecycleView下方.首先,我想知道这面旗帜意味着什么
谷歌说:
我随机更改了这个标志,在某些情况下,我的编辑文本消失,直到我向上滚动工具栏然后编辑出现.我阅读谷歌文档,但我不能很好.我想简单地理解它.