我刚刚将一个代码片段从VB.NET转换为C#,并偶然发现了这个问题.
考虑以下代码:
Dim x As Integer = 5
Dim y As Object = x
Dim z As Decimal = CType(y, Decimal)
Run Code Online (Sandbox Code Playgroud)
编译器或运行时没有错误.z是五.
现在让我们将此代码翻译为C#
int x = 5;
object y = x;
decimal z = (decimal)y;
Run Code Online (Sandbox Code Playgroud)
编译器没有错误,但在运行时抛出异常:
Cannot unbox "y" to "decimal"
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,这将是最聪明的C#方式.
目前我的代码看起来像.
int x = 5;
object y = x;
decimal z = decimal.Parse(y.ToString());
Run Code Online (Sandbox Code Playgroud)
但另一种解决方案是:
decimal z = (decimal)(int)y;
Run Code Online (Sandbox Code Playgroud)
这看起来有点混乱,但可能比decimal.Parse更少开销.
我有以下接口:
public interface ITemplateItem
{
int Id { get; set; }
String Name { get; set; }
String Text { get; set; }
int CategoryId { get; set; }
int Typ { get; set; }
}
public interface ITemplateCategory
{
int Id { get; set; }
String Name { get; set; }
List<ITemplateItem> TemplateItems { get; set; }
void Add(ITemplateItem item);
void Remove(ITemplateItem item);
ITemplateItem CreateTemplateItem();
}
Run Code Online (Sandbox Code Playgroud)
我对ITemplateItem的实现如下所示:
public class MyTemplateItem : ITemplateItem
{
#region ITemplateItem Member
public int Id …Run Code Online (Sandbox Code Playgroud) 如果我从收件箱中选择Outlook邮件并将其复制到剪贴板,我可以将其作为*.msg文件粘贴到桌面.
现在我想为我的应用程序实现相同的功能.
Clipboard对象包含以下元素:
RenPrivateSourceFolder
RenPrivateMessages
RenPrivateItem
FileGroupDescriptor
FileGroupDescriptorW
FileDrop
FileNameW
FileName
FileContents
Object Descriptor
System.String
UnicodeText
Text
Run Code Online (Sandbox Code Playgroud)
FileGroupDescriptor包含MemoryStream带文件名的文件(Subject.msg),但我不知道如何从剪贴板数据中创建Outlook消息的副本,因为没有任何元素似乎包含消息本身.
有什么建议?
我有桌子items和桌子item_attributes.
为简单起见,假设我的表项有一列id和一列name.对于cource,id列上有一个索引.
该item_attributes表具有的列id,item_id,attribute_name和attribute_value和索引ONattrubute_name
现在我想查询具有特定属性的所有项目而不使用连接.
我使用以下查询执行此操作:
SELECT *
FROM items i
WHERE i.id IN (
SELECT item_id
FROM item_attributes a
WHERE a.attribute_name = 'SomeAttribute'
AND a.attribute_value = 'SomeValue'
)
Run Code Online (Sandbox Code Playgroud)
SubQuery本身运行得很快.
如果我首先执行查询本身并将结果用于IN查询
SELECT *
FROM items i
WHERE i.id IN (1,3,5,7,10,...)
Run Code Online (Sandbox Code Playgroud)
它也很快.
但是,组合查询非常非常慢(> 2秒).如果我调查查询计划,我明白为什么:MySQL对items表执行全表扫描,而不是先执行子查询并使用结果进行索引查询.
1, 'PRIMARY', 'items', 'ALL', '', '', '', '', 149726, 'Using where'
2, 'DEPENDENT SUBQUERY', 'item_attributes', 'index_subquery', 'IDX_ATTRIBUTE_NAME', …Run Code Online (Sandbox Code Playgroud) 我已经menustrip1在我的Windows窗体中添加了一个,我静态地添加了一个toolstripmenuitem(WindowstoolStripmenuItem)menustrip1.我已经动态创建了一个tooltripmenuitem.我想将这个动态的toolstripmenuitem添加到静态menustripitem(WindowstoolStripmenuItem)中,该静态menustripitem是在设计时静态创建的.
ToolStripMenuItem itm = new ToolStripMenuItem();
itm.Name = "fm1";
itm.Text = "Form1";
Run Code Online (Sandbox Code Playgroud)
如何将此子项添加到静态menustrip的Windows项目中.
我有关于VB/C#的(转储)问题
我经常使用第三方类,我只能指定id或key来访问子对象.
例:
而不是写:
DataRow row = GetAPopulatedDataRowSomeWhere();
Object result = row.Items[1]; // DataRow has no Items property
Object result = row.Items["colName"]; // Also not possible
Run Code Online (Sandbox Code Playgroud)
我使用此代码访问成员:
DataRow row = GetAPopulatedDataRowSomeWhere();
Object result = row[1];
Object result = row["colName"];
Run Code Online (Sandbox Code Playgroud)
有人能告诉我一个类如何支持这种语法?我自己的类有一个我想以这种方式访问的词典.
MyClass["key"]; // <- that's what I want
MyClass.SubItems["key"]; // <- that's how I use it now
Run Code Online (Sandbox Code Playgroud) 我有一个名为main的Activity.如果我打电话
Toast.makeText(this, "Hello World from main", Toast.LENGTH_SHORT);
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,对于我的应用程序中的每个其他活动,我都无法显示Toast.没有例外,日志中没有任何内容,但我没有看到Toast.
我的主要活动是通过选项菜单启动另一个活动:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.main_menu_entry:
Intent infolist = new Intent(this, infolist.class);
startActivityForResult(infolist, R.layout.infolist);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的infolist活动中,我有另一个选项菜单,它应该显示Toast.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.infolist_menu_entry:
// this Toast is never shown.
Toast.makeText(this, "Hello World from infolist", Toast.LENGTH_Short);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
什么可能导致这个问题?我使用最新的SDK与Min SDK版本= 3和1.5模拟器.
我正在使用Visual Studio 2008为Windows CE开发应用程序.
如果我通过USB连接设备,我可以在设备上调试/部署我的应用程序.但是在CE设备上,USB连接只是作为另一个带有私有IP的网络接口出现.
现在我想知道是否可以解除USB连接,通过LAN连接(我的PC和CE设备都在同一个子网上).
我有这个C#代码:
public class Locking
{
private int Value1; private int Value2;
private object lockValue = new Object();
public int GetInt1(int value1, int value2)
{
lock (lockValue)
{
Value1 = value1;
Value2 = value2;
return GetResult();
}
}
public int GetInt2(int value1, int value2)
{
lock (lockValue)
{
return GetInt1(value1, value2);
}
}
private int GetResult()
{
return Value1 + Value2;
}
}
Run Code Online (Sandbox Code Playgroud)
所以基本上我期望一个死锁,如果我执行GetInt2但代码只是执行.任何好的解释.
我有一个 web 应用程序,它对浏览器客户端使用表单身份验证,还对 odata 源的 api 访问使用基本身份验证。
这在生产中有效,但现在我正在努力使其可测试。
我使用 WebApplicationFactory 方法,并设法实现了这里描述的测试身份验证处理程序
我的单元测试现在按预期工作。
但是我必须将Test-Scheme添加到我的Authorize属性中。
[Authorize(Roles = "admin", AuthenticationSchemes = "BasicAuthentication,Test")]
[ODataRoutePrefix("Customers")]
public class CustomerController : ODataController
{
public CustomerController()
{
}
[ODataRoute, EnableQuery]
public IActionResult Get()
{
var result = new List<Customers>();
return Ok(result);
}
}
Run Code Online (Sandbox Code Playgroud)
The result is that my tests work but in production I get an exception because the Test scheme is missing.
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware: Error: An unhandled exception has occurred while executing the …Run Code Online (Sandbox Code Playgroud)