请考虑以下来源:
static void Main(string[] args)
{
bool test;
Action lambda = () => { test = true; };
lambda();
if (test)
Console.WriteLine("Ok.");
}
Run Code Online (Sandbox Code Playgroud)
它应该编译,对吗?嗯,事实并非如此.我的问题是:根据C#标准,这个代码应该编译还是这个编译器错误?
Use of unassigned local variable 'test'
Run Code Online (Sandbox Code Playgroud)
注意:我知道,如何修复错误,我部分知道,为什么会发生.但是,无条件地分配了局部变量,我想,编译器应该注意到,但事实并非如此.我想知道为什么.
评论答案:C#允许声明未分配的变量,这实际上非常有用,即.
bool cond1, cond2;
if (someConditions)
{
cond1 = someOtherConditions1;
cond2 = someOtherConditions2;
}
else
{
cond1 = someOtherConditions3;
cond2 = someOtherConditions4;
}
Run Code Online (Sandbox Code Playgroud)
编译器正确编译了这段代码,我认为,保留未分配的变量实际上会使代码更好一些,因为:
在边缘:这更有趣.考虑C++中的相同示例:
int main(int argc, char * argv[])
{
bool test;
/* Comment …Run Code Online (Sandbox Code Playgroud) 我只是想知道为什么tellg()在basic_istream<>类中tellp()定义并在basic_ostream<>类中定义的成员函数具有不同的名称.这是因为basic_fstream<>是源于basic_istream<>和basic_ostream<>吗?
我刚刚写了一个小例子检查,C#的优化器在索引器的情况下表现如何.这个例子很简单 - 我只是将一个数组包装在一个类中并尝试填充它的值:一次直接和一次索引器(内部访问数据的方式与直接解决方案完全相同).
public class ArrayWrapper
{
public ArrayWrapper(int newWidth, int newHeight)
{
width = newWidth;
height = newHeight;
data = new int[width * height];
}
public int this[int x, int y]
{
get
{
return data[y * width + x];
}
set
{
data[y * width + x] = value;
}
}
public readonly int width, height;
public readonly int[] data;
}
public class Program
{
public static void Main(string[] args)
{
ArrayWrapper bigArray = new ArrayWrapper(15000, 15000);
Stopwatch …Run Code Online (Sandbox Code Playgroud) 我想在VS Code中创建一个片段,其中包含精确的字符串${code}.但是,当我以这种形式输入时,VS Code会尝试将其解释为片段参数.我应该如何正确地逃脱它?
解析传递的可变参数数量时有哪些规则params?
假设我有代码:
public void Method(params object[] objects) { }
public void Method(IMyInterface intf, params object[] objects) { }
Run Code Online (Sandbox Code Playgroud)
Method(a, b, c)如果a是IMyInterface,如何解决?我可以确定,C#总是会尝试选择大多数匹配的重载吗?
我正在为我的应用准备drawables.我有很多单选按钮,它们显示为带有可选框架的图像(选中时).一个drawable看起来如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/colorPrimary" />
</shape>
</item>
<item>
<inset android:insetTop="@dimen/selectionBorderSize"
android:insetLeft="@dimen/selectionBorderSize"
android:insetRight="@dimen/selectionBorderSize"
android:insetBottom="@dimen/selectionBorderSize">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff"></solid>
</shape>
</item>
<item>
<bitmap android:src="@drawable/sharp7" >
<padding android:bottom="@dimen/selectionBorderSize"
android:top="@dimen/selectionBorderSize"
android:left="@dimen/selectionBorderSize"
android:right="@dimen/selectionBorderSize" />
</bitmap>
</item>
</layer-list>
</inset>
</item>
</layer-list>
</item>
<item android:state_checked="false">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff" />
</shape>
</item>
<item>
<inset android:insetTop="@dimen/selectionBorderSize"
android:insetLeft="@dimen/selectionBorderSize"
android:insetRight="@dimen/selectionBorderSize"
android:insetBottom="@dimen/selectionBorderSize">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff"></solid>
</shape>
</item>
<item>
<bitmap android:src="@drawable/sharp7" >
<padding android:bottom="@dimen/selectionBorderSize"
android:top="@dimen/selectionBorderSize" …Run Code Online (Sandbox Code Playgroud) 我的应用程序包含一个填充按钮的区域.我希望以这种方式实现活动,按钮区域上的fling手势会将其切换到另外两个区域之一(使用ViewFlipper).
我在检测手势方面做了两种方法.第一个涉及使用GestureDetector.但是,Button上的触摸动作事件没有引发onTouchEvent活动方法,所以 - 结果 - 我无法将它转发到GestureDetector类.简而言之,失败.
第二种方法 - 使用GestureOverlayView.然而,这一次,我已经达到了第二个极端:不仅检测到手势,而且执行手势的按钮报告了点击.
我希望界面以下列方式工作:如果用户触摸按钮并释放触摸(或仅略微移动手指),则按钮会报告单击并且未检测到任何手势.另一方面,如果用户触摸屏幕并进行更长时间的移动,则应检测手势并且按钮不报告点击事件.
我已经实现了一个小概念验证应用程序.活动XML代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical">
<android.gesture.GestureOverlayView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/overlay">
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<TextView android:id="@+id/display" android:layout_width="match_parent" android:layout_height="wrap_content" />
<Button android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/button"/>
</LinearLayout>
</android.gesture.GestureOverlayView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
活动java代码如下:
package spk.sketchbook;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.gesture.*;
import android.gesture.GestureOverlayView.OnGestureListener;
public class Main extends Activity implements OnGestureListener, OnClickListener
{
private void SetupEvents()
{
GestureOverlayView ov = (GestureOverlayView)findViewById(R.id.overlay);
ov.addOnGestureListener(this); …Run Code Online (Sandbox Code Playgroud) 我有一个由矩形和一些动态创建的标签组成的复合控件(动态,因为在设计时我不知道应该显示多少标签).通过组合整个控件大小,通过依赖属性传递的附加集合以及标签本身的高度,在运行时评估标签的位置(边距).
不幸的是,在渲染之前,我没有采用确定性的方法来确定标签高度.ActualWidth并且ActualHeight被显示在标签0之前,宽度/高度没有设置,因为我希望标签的大小自己立足于自己的内容,DesiredSize返回为0,正确的尺寸或大小超过实际标签尺寸(如2〜3次),RenderSize返回有效大小或0,它就像第一个标签返回有效大小和第二个 - 0.0,没有任何明显的原因.
我试过调用Measure()带有double.PositiveInfinity的标签只是为了达到这种情况,当时的DesiredSize方式比预期的要大(所有标签都有相同的字体,只包含数字,所以它们的大小都要小得多,但首先有~16像素,第二 - ~36,虽然渲染后,RenderSize对他们两个都有效).
在屏幕上呈现之前,是否有确定的方法来检查所需的控件大小,仅基于其内容(而不是对齐/边距)?
你知道SWT的任何GUI构建器,它与Eclipse Juno(4.2)兼容吗?
我正在编写一个跨平台的应用程序.一个版本将在Win32下运行,第二个版本在Windows Phone上运行.
我想重用我的C++核心 - 尤其是内部没有平台依赖,仅限STL.我命令这样做,我想在两个项目中使用相同的源文件:静态Win32库(.lib)和Windows Phone组件(C++/CLI).
如何配置这两个项目以使用完全相同的源文件和头文件?
好的,我们举个例子.比方说,我有项目:
MyApp.Library [win32 lib]
myClass.cpp
myClass.h
Run Code Online (Sandbox Code Playgroud)
该库被编译为.DLL文件,然后在Win32应用程序中导入:
MyApp.Win32App [win32 C#]
Run Code Online (Sandbox Code Playgroud)
由于win32与二进制级别的Windows Phone不兼容,我不能直接使用该lib.但由于Library只使用STL,我可以创建Windows Phone组件,将所有源代码放在那里并构建.
MyApp.Component [Windows Phone component]
myClass.cpp
myClass.h
Run Code Online (Sandbox Code Playgroud)
我希望这两个文件与库中使用的文件完全相同.我该如何组织项目来实现这种效果?