我正在开发Android应用程序.此应用程序应与蓝牙(BT)设备通信(发送一些字节).我在设备(Samsung Galaxy mini)上调试/运行此应用程序时遇到问题.当我创建一个BT插座并停止调试时,手机冻结,我必须通过取出电池重新启动它.如果运行此应用程序(来自Eclipse)一切正常,但当我尝试再次运行时,手机冻结和应用程序未安装.如果我尝试在第二次运行之前手动卸载此应用程序,请再次手机冻结.这是一个有问题的代码:
private final BluetoothDevice mmDevice;
private UUID uuid;
public ConnectionThread(BluetoothDevice device) {
Log.d(TAG, "create ConnectionThread");
uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
BluetoothSocket tmp = null;
mmDevice = device;
try {
tmp = mmDevice.createRfcommSocketToServiceRecord(uuid);
} catch (IOException e) { }
mmSocket = tmp;
socketConnected = true;
}
Run Code Online (Sandbox Code Playgroud)
这是线程的构造函数.当我评论这条线
tmp = mmDevice.createRfcommSocketToServiceRecord(uuid);
Run Code Online (Sandbox Code Playgroud)
手机没有冻结所以问题是创建套接字(不连接).每次调试或运行后重启手机都很烦人,我还要做很多工作.
如果我从手机(与Eclipse断开连接)运行此应用程序,它可以正常工作.任何想法可能是一个问题或如何解决它?谢谢.
是否可以在Windows 8 Release Preview上安装WP7 SDK?我尝试使用标准安装包但不断收到以下错误:
安装要求:
KB2669191不适用,或被计算机上的其他条件阻止. 有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=225649.
我安装了WP7 SDK 7.1,但在instaa中有一些兼容的错误.现在我可以为WP7启动VS2010但由于以下错误而无法构建解决方案:
项目中不存在目标"GetCopyToOutputDirectoryContentProjectItems".
Public Class MyList
Inherits List(Of MyObject)
Public ReadOnly Property SelectedCount() As Integer
Get
Return Me.Count(Function(obj) obj.IsSelected)
End Get
End Property
End Class
Run Code Online (Sandbox Code Playgroud)
上面的代码导致编译时错误.如您所见,我正在尝试使用扩展方法Count(<predicate>).我猜错误是因为List类本身中也存在类似命名的属性Count ,隐藏了扩展成员.
我的问题是:
我是否需要将我的类显式地转换为其他内容才能访问Count扩展方法?如果是这样,在上述场景中究竟应该是哪个类?
为什么编译器不能从使用中推断出我所指的方法而不是属性?
考虑到这是一种使用频繁的方法(有时可能被称为每秒数百次),铸造是否会产生很大的开销?
在这方面C#是否比VB.NET更好?
如果有事可做,我正在使用带有VS2010的.NET 4.0.
编辑
错误信息:
'
Public ReadOnly Property Count As Integer'没有参数,其返回类型无法编入索引.
考虑以下代码:
static void Main(string[] args)
{
Get<Student>(new Student());
System.Console.Read();
}
public static void Get<T>(T person)
{
Console.WriteLine("Generic function");
}
public static void Get(Person person)
{
person.Show();
}
Run Code Online (Sandbox Code Playgroud)
这是我的人类:
class Person
{
public void Show()
{
Console.WriteLine("I am person");
}
}
class Student : Person
{
public new void Show()
{
Console.WriteLine("I am Student");
}
}
Run Code Online (Sandbox Code Playgroud)
我打电话Get给学生并通过该方法.就像这样:
Get<Student>(new Student());
Run Code Online (Sandbox Code Playgroud)
所以我明白了:Generic function但是我打电话的时候Get是这样的:
Get(new Student());
Run Code Online (Sandbox Code Playgroud)
我希望这Get(Person person)可以被调用Get<T>(T person).但是再次打电话:.为什么编译器有这种行为?
我一直在玩仿制药和代表,我发现了一些我不理解的东西.我有非常相似的通用静态方法,一个接受Action<T>,第二个接受Func<T>.现在的问题是:如果我在Func<T>没有显式类型的情况下调用那个接受,编译器就可以了.但是接受Action<T>我的程序的人无法编译(请参阅错误消息的代码).
我的问题是:为什么编译器能够识别返回类型,但是无法识别参数类型?
public interface IMessage
{ }
public class Message : IMessage
{
}
Run Code Online (Sandbox Code Playgroud)
static void HandleAction<TMessage>(Action<TMessage> action)
where TMessage : IMessage
{ }
static void HandleFunction<TMessage>(Func<TMessage> action)
where TMessage : IMessage
{ }
static void A(Message message)
{ }
static Message F()
{
return new Message();
}
static void Main(string[] args)
{
// this one is ok
HandleFunction(F);
// compiler error:
// The type arguments for method
// 'template_test.Program.HandleAction<TMessage>(System.Action<TMessage>)'
// cannot …Run Code Online (Sandbox Code Playgroud) var itemlist = (from u in db.getitems
select u).ToList();
var item= new EstimatesModel
{
id = Convert.ToInt64(estimatelist.id),
expiry_date = estimatelist.expiry_date,
terms_conditions = estimatelist.terms_conditions,
rate = Convert.ToDecimal(itemlist.Select(m =>m.taxrate).ToList())
};
return View(item);
Run Code Online (Sandbox Code Playgroud)
在这个查询中注意,速率有多个来自getitems哪里rate是Decimal类型的项目,所以我转换了它.
然后我就单一的实体返回视图item,其中仅列rate是List.
但我在调试时收到此错误 -
无法将类型为"System.Collections.Generic.List`1 [System.Decimal]"的对象强制转换为"System.IConvertible".
我将在视图页面中使用此类 -
@for (int i = 0; i < Model.rate; i++)
{
<ul>
<li><a href="#">@i</a></li>
</ul>
}
Run Code Online (Sandbox Code Playgroud) 为什么IEnumerable<T>.Reverse()返回带有原始集合的List<T>反转集合并反转原始集合本身?这对我来说有点困惑,因为List<T>继承自IEnumerable<T>.
使用新的MsBuild版本,很容易在.csproj项目中定位多个框架和框架版本:
<TargetFrameworks>net40;net45;net461;netcoreapp1.1</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)
现在,我如何获得为每个定义的常量,以便我可以让某些代码只是例如netcoreapp1.1pass而不是完整框架编译的一部分?
我希望能够像这样添加一个预处理器指令:
#if NET_CORE
// some code
#endif
Run Code Online (Sandbox Code Playgroud)
对于完整的.NET Framework和可能的.NET Standard也是如此.
我发现的其他问题没有采用新<TargetFrameworks>方法将框架定义为帐户.像这样的东西不起作用:
<DefineConstants Condition=" '$(TargetFramework)' == '.NETCoreApp' ">NET_CORE</DefineConstants>
Run Code Online (Sandbox Code Playgroud) 我正在创建我的第一个asp.net mvc3应用程序.我正在使用代码优先方法.我有以下型号:
public class FootballGame
{
[Key]
public Guid id_FootballGame { get; set; }
[ForeignKey("FootballGame")]
public Guid? FK_id_FootballGame { get; set; }
public virtual FootballGame PreviousFootballGame { get; set; }
[ForeignKey("FootballTeam")]
public Guid id_FootballTeam_owner { get; set; }
public virtual FootballTeam FootballTeamOwner { get; set; }
[ForeignKey("FootballTeam")]
public Guid id_FootballTeam_guest { get; set; }
public virtual FootballTeam FootballTeamGuest { get; set; }
}
public class FootballTeam
{
[Key]
public Guid id_FootballTeam { get; set; }
public string teamName { get; …Run Code Online (Sandbox Code Playgroud) 假设我有IEnumerable<int>使用List<int>字段支持的属性,所以我可以在类中修改集合,但它是以只读方式公开公开的.
public class Foo
{
private List<int> _bar = new List<int>();
public IEnumerable<int> Bar
{
get { return _bar; }
}
}
Run Code Online (Sandbox Code Playgroud)
但是使用这样的代码,您可以轻松地将从属性中检索到的对象转换回List<int>并修改它:
var foo = new Foo();
var bar = (List<int>)foo.Bar;
bar.Add(10);
Run Code Online (Sandbox Code Playgroud)
问题是:什么是最好的(最好的可读性,最容易编写,没有性能损失)避免这种情况的方法?
我可以提出至少4个解决方案,但不是它们是完美的:
foreach并且yield return:
public IEnumerable<int> Bar
{
get
{
foreach (var item in _bar)
yield return item;
}
}
Run Code Online (Sandbox Code Playgroud)
-写作和阅读真的很烦人.
AsReadOnly():
public IEnumerable<int> Bar
{
get { return _bar.AsReadOnly(); }
}
Run Code Online (Sandbox Code Playgroud)
+当有人试图修改返回的集合时+ …