我有一个问题,在下面的代码中了解导致编译错误的原因:
static class Program
{
static void Main()
{
dynamic x = "";
var test = foo(x);
if (test == "test")
{
Console.WriteLine(test);
}
switch (test)
{
case "test":
Console.WriteLine(test);
break;
}
}
private static string foo(object item)
{
return "bar";
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误switch (test)符合:
A switch expression or case label must be a bool, char, string, integral,
enum, or corresponding nullable type.
Run Code Online (Sandbox Code Playgroud)
Intellisence向我展示了foo操作将在运行时解决,这很好,因为我使用动态类型作为参数.但是我不明白if当开关没有时条件编译得很好.
上面的代码只是我在我的应用程序(VSTO)中的简化版本,它是在将应用程序从VSTO3迁移到VSTO4之后出现的,当时VSTO中的一个方法被更改为返回dynamic类型值而不是object.
任何人都可以给我一个解释是什么问题.我知道如何解决它,但我想了解发生了什么.
我的APS.NET应用程序中有一个带有AnonymousTemplate和LoggedInTemplate的LoginView.我已将LogStatus控件放在LoggedInTemplate中,但它不能按预期工作.
这是代码
<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
<asp:Login ID="Login1" runat="server" OnAuthenticate="Login1_Authenticate"
DisplayRememberMe="False" PasswordRecoveryUrl="/"
DestinationPageUrl="/">
</asp:Login>
</AnonymousTemplate>
<LoggedInTemplate>
You are logged in as
<asp:LoginName ID="LoginName1" runat="Server"></asp:LoginName>.
<asp:LoginStatus ID="LoginStatus1" runat="server" LogoutAction="Redirect"
LogoutPageUrl="/" onloggingout="LoginStatus1_LoggingOut" />
</LoggedInTemplate>
</asp:LoginView>
Run Code Online (Sandbox Code Playgroud)
所有事件处理程序都在代码隐藏文件中正确定义.
问题是,如果用户登录,他将从LoginStatus控件中看到带有注销链接的用户名.单击注销链接会将用户返回到登录表单(登录和注销表单都是同一用户控件的一部分)但如果我刷新页面,则用户仍然会登录.
我注意到如果我在LoginView之外移动LoginStatus控件,那么注销过程将按预期工作.我还注意到,当LoginStatus在LoginView中时,它不会引发注销事件.
有没有人有任何想法可能是什么问题?
在我的iOS应用程序中,我的fetch控制器有一个非常简单的谓词.
NSString *format = [NSString stringWithFormat:@"name like[c] '%@'", nameVar];
NSPredicate *predicate = [NSPredicate predicateWithFormat:format];
[fetchController setPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
它执行基本的不区分大小写的名称查找.现在我想改变它,以便我可以在搜索框中放置一些单词(nameVar具有搜索框中的值),用空格分隔,并让谓词过滤匹配所有这些关键字的结果.
所以,如果我有两个名字:"约翰史密斯"和"玛丽史密斯",我搜索:"史密斯M"我想只有一个结果,但这样的搜索:"Sm th ith"应该返回两个值.
有谁知道如何实施?
有没有一种方法来测试JavaScript的键盘事件处理程序(keypress,keyup,keydown事件)?
我知道我可以声明这样的事件处理程序:
function keyUpEvHandler(e) {
... // code here
}
$('#myId').keyup(keyUpEvHandler);
Run Code Online (Sandbox Code Playgroud)
然后在单元测试中运行此函数,但我必须准备事件参数对象与按下实际键时传递的相同:
var e = {keyCode: 70, ...};
Run Code Online (Sandbox Code Playgroud)
有没有办法触发这个事件并传递关键代码作为参数或类似的东西?不幸的是,jQuery trigger()docs不包括键盘事件.
我的团队必须维护一个写得很糟糕的大型php应用程序.它是在一个设计不佳的数据库之上混合使用html,javascript和SQL(例如,它有一个包含几百列的表).代码库的唯一优势是它可以工作.
我们经常修复错误并重写它的一部分.
我想给我们做的重写提供一个结构,所以我想将mvc框架集成到代码库中.你能建议一个好的环境框架吗?
以下是我希望从这样的框架中获得的事项列表:
在我的应用程序中,我有一个启动同步过程的表单,出于多种原因,我希望一次只允许一个同步运行.所以我在我的表单中添加了一个静态bool字段,指示是否正在进行同步,并添加了一个锁定,如果尚未设置此字段,则将该字段设置为true,以便第一个线程可以启动同步,但是当它运行其他每个线程时将尝试启动它将终止.
我的代码是这样的:
internal partial class SynchronizationForm : Form
{
private static volatile bool workInProgress;
private void SynchronizationForm_Shown(object sender, EventArgs e)
{
lock (typeof(SynchronizationForm))
{
if (!workInProgress)
{
workInProgress = true;
}
else
{
this.Close();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用但是当我在我的项目上运行Code Analysis时,我收到以下警告消息:
CA2002:Microsoft.Reliability:'SynchronizationForm.SynchronizationForm_Shown(object,EventArgs)'锁定类型为'Type'的引用.将其替换为具有强身份的对象的锁定.
任何人都可以向我解释我的代码有什么问题,如何改进它以使警告消失.对象具有强烈的身份意味着什么?
我有一个启动线程的表单.现在我希望表单在此线程终止时自动关闭.
到目前为止我找到的唯一解决方案是在表单中添加一个计时器,并检查每个tick上是否存在线程.但我想知道是否有更好的方法可以做到这一点?
目前我的代码看起来更像这样
partial class SyncForm : Form {
Thread tr;
public SyncForm()
{
InitializeComponent();
}
void SyncForm_Load(object sender, EventArgs e)
{
thread = new Thread(new ThreadStart(Synchronize));
thread.IsBackground = true;
thread.Start();
threadTimer.Start();
}
void threadTimer_Tick(object sender, EventArgs e)
{
if (!thread.IsAlive)
{
Close();
}
}
void Synchronize()
{
// code here
}
}
Run Code Online (Sandbox Code Playgroud) 在我的iPhone应用程序中,我需要使用GPS(精确的CoreLocation)来获取设备的当前位置.我知道大多数(如果不是全部)使用GPS的应用程序都有一个弹出窗口,要求用户允许GPS访问.这是由iPhone SDK自动完成的,还是我应该自己实现这些功能?
我试图在iPhone模拟器上运行我的应用程序,它根本没有要求权限,所以我想知道在实际的手机上是否会发生同样的事情.
如果我自己实现并且SKD提供了开箱即用的功能,那么我将在我的应用程序中有两个我不想要的确认.
我有一个使用Entity Framework 5的MVC应用程序.在一些地方,我有一个代码可以创建或更新实体,然后必须对更新的数据执行某种操作.其中一些操作需要访问导航属性,我无法让它们刷新.
这是示例(我有简化的代码)
楷模
class User : Model
{
public Guid Id { get; set; }
public string Name { get; set; }
}
class Car : Model
{
public Guid Id { get; set; }
public Guid DriverId { get; set; }
public virtual User Driver { get; set; }
[NotMapped]
public string DriverName
{
get { return this.Driver.Name; }
}
}
Run Code Online (Sandbox Code Playgroud)
调节器
public CarController
{
public Create()
{
return this.View();
}
[HttpPost]
public Create(Car car)
{
if …Run Code Online (Sandbox Code Playgroud) 我一直在使用Resharper几天,我真的很喜欢这个工具,但有一件事让我烦恼,我想知道它是否可以改变.
我从生成的代码中获得了很多问题通知(在我的项目中差不多有1400个).我想将这些文件设置为忽略,因此不会像使用StyleCop和CodeAnalysis那样检查它们.不幸的是,看起来Resharper从它的选项中忽略了Generated Code设置,因为我仍然收到相同的通知.我已经尝试设置文件掩码(即for *.resx)并手动添加文件生成,但它仍然没有改变任何东西.
我不知道它是否重要,但我正在使用VS 2010.
.net ×2
c# ×2
iphone ×2
.net-4.0 ×1
asp.net ×1
asynchronous ×1
dbcontext ×1
events ×1
frameworks ×1
gps ×1
jquery ×1
locking ×1
loginstatus ×1
loginview ×1
methods ×1
nspredicate ×1
php ×1
popup ×1
qunit ×1
resharper ×1
unit-testing ×1