小编cuo*_*gle的帖子

搜索程序集中的类型

我有一个代码Type.GetType(myTypeName)正在返回的问题,null因为具有该类型的程序集不是当前正在执行的程序集.

我发现这个问题的解决方案是下一个:

var assemblies = AppDomain.CurrentDomain.GetAssemblies();
Type myType = assemblies.SelectMany(a => a.GetTypes())
                        .Single(t => t.FullName == myTypeName);
Run Code Online (Sandbox Code Playgroud)

问题是第一次运行此代码会导致异常"Sequence contains no matching element".当我再次调用此部分代码时 - 一切正常并且需要加载类型.

谁能解释这种行为?为什么在第一次调用的范围内没有找到需要的汇编/类型?

.net c# reflection appdomain

5
推荐指数
1
解决办法
2599
查看次数

输出参数麻烦

我在调用我已经制作的方法时遇到了问题.

我打电话给的方法如下

public bool GetValue(string column, out object result)
{
    result = null;
    // values is a Dictionary<string, object>
    if (this._values.ContainsKey(column))
    {
        result = Convert.ChangeType(this._values[column], result.GetType());
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用此代码调用方法,但我收到编译器错误

int age;
a.GetValue("age", out age as object) 
Run Code Online (Sandbox Code Playgroud)

ref或out参数必须是可赋值变量

有没有其他人有这个问题,或者我只是做错了什么?

.net c#

5
推荐指数
1
解决办法
125
查看次数

为什么在该实例的继承链中的析构函数按顺序被调用,从大多数派生到最少派生?

基于C#规范,10.13 Destructors

"当一个实例被破坏时,该实例的继承链中的析构函数按顺序被调用,从大多数派生到最少派生."

我的问题是:

为什么从最派生到最少派生的顺序被称为析构函数?为什么不按顺序调用,从最少派生到大多数派生或其他顺序?

c#

5
推荐指数
2
解决办法
130
查看次数

指定的类型必须是不包含引用的结构

我正在尝试Write<T>MemoryMappedViewAccessor课堂上使用该功能。我T在这种情况下如下:

[StructLayout(LayoutKind.Explicit)]
    public struct Message
    {
        public void AddString(string str)
        {
            if (stringContents == null)
                stringContents = new byte[1024 * 10];
            stringContents = Encoding.ASCII.GetBytes(str);
        }
        public string GetString()
        {
            if (stringContents == null)
                return string.Empty;
            return Encoding.ASCII.GetString(stringContents);
        }
        [FieldOffset(0)]
        public byte[] stringContents;
    }
Run Code Online (Sandbox Code Playgroud)

但是,当我拨打电话时,例如:

//Initialized Elsewhere: MemoryMappedViewAccessor writer
Message messageAlreadyOnWire = new Message();
messageAlreadyOnWire.AddString(data);
writer.Write<Message>(0, ref messageAlreadyOnWire);
Run Code Online (Sandbox Code Playgroud)

我收到如下错误:

指定的类型必须是不包含引用的结构。参数名称:类型

我的结构中唯一的“引用”是一个字节数组。有没有办法解决这个问题?我对固定长度的字节数组没问题,但我不确定如何在不深入研究 的情况下声明一个unsafe,我不想这样做。

.net c# structure exception memory-mapped-files

5
推荐指数
1
解决办法
1595
查看次数

MvvmCross vnext:将插件与monodroid合并

我正在尝试将插件库项目合并为一个(例如,Location + PhoneCallTask​​).它与wp7完美配合,但我得到monodroid的未处理异常:

无法加载文件或程序集'Cirrious.MvvmCross.Plugins.Location.Droid.dll'

当然,位置插件在合并库的'Cirrious.MvvmCross.Plugins.Droid.dll'中引用.

有没有办法指向合并的库路径?

c# xamarin.ios windows-phone-7 xamarin.android mvvmcross

5
推荐指数
1
解决办法
810
查看次数

C# - 检查给定的URL是文件还是目录?

我有一个方法,它将输入http,ftp或本地路径.使用输入URL,我需要确定它是文件还是目录.

Path.GetExtension(url)工作得很好.但如果目录以/ have'开头.在它的名字,然后这个检查将失败.

有没有其他方法可以检查并列出url if directory?

c# path

5
推荐指数
1
解决办法
5388
查看次数

如何使动态edm模型支持odata查询

我一直在尝试将DynamicEdmModelCreation示例从https://github.com/OData/ODataSamples/tree/master/WebApi/v4/DynamicEdmModelCreation调整为可行的v3版本(我想将odata直接加载到excel中,而不是支持odata v4)

我添加config.AddODataQueryFilter()到设置和[EnableQuery]Controller的get方法,但我现在收到异常:

System.Web.Http.OData.dll中发生'System.Runtime.Serialization.SerializationException'类型的第一次机会异常

附加信息:'EnumerableQuery`1'无法使用ODataMediaTypeFormatter序列化.

这是从https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/OData/src/System.Web.Http.OData/OData/Formatter/ODataMediaTypeFormatter.cs#L577抛出的

事实上我的Controller的Get方法正在返回EdmEntityObjectCollection一个问题吗?我原本以为只需添加EnableQuery属性就足以让框架知道如何将该查询操作应用于EdmEntityObjectCollection我正在返回的内容(这将包含比可能需要的更多的数据)

c# odata asp.net-web-api asp.net-web-api2

5
推荐指数
1
解决办法
1366
查看次数

如何获取 PowerBi 嵌入报表的筛选器选项

我们试图隐藏嵌入的 powerbi 报告的本机过滤器面板,并使用我们自己的 html 和 js 代码在嵌入的 powerbi 报告旁边创建一个全新外观的过滤器面板。

我们遇到的问题是如何获得过滤器的所有选项?我们需要获取过滤器的选项,以便我们可以将它们填充到自定义过滤器面板上。

我发现 powerbi 客户端 js sdk 作为报告的“getFilters”方法,但过滤器值是空的,除非我们手动检查 powerbi 本机过滤器面板上的所有选项。

我们怎样才能获得任何可用的过滤器选项?

filter powerbi powerbi-embedded

5
推荐指数
1
解决办法
1326
查看次数

长时间运行的存储过程,无需保持与 Azure 数据库的连接

我们有很长时间运行的存储过程执行 ETL 工作,以便将原始表中的数据加载到 Azure 数据库中的星型架构(事实 - 维度)中。

这个存储过程需要大约 10 到 20 小时运行超过 1000 万行(使用 MERGE 语句)。

目前,我们从 C# 代码 (ADO.NET) 运行存储过程并保持CommandTimeout = 0(永远)。但有时连接会断开,因为与 Azure 数据库的连接不稳定。

是否可以在数据库级别运行存储过程而不一直保持连接打开,然后在 Progress 表中记录存储过程的过程以跟踪进度?

我看到一些建议:

  1. 代理作业,在 Azure 数据库上似乎不可能,因为它目前不支持。

  2. SqlCommand.BeginExecuteNonQuery:我不确定 100% 是否BeginExecuteNonQuery仍然保持连接在引擎盖下打开。

有没有其他方法可以做到这一点?

c# sql sql-server stored-procedures azure-sql-database

5
推荐指数
1
解决办法
1070
查看次数

Task.WaitAll - 不等待?

我试图在任务并行库中找到Task.WaitAll(..).

我正在使用以下代码运行测试以尝试模拟两个任务,一个将比指定的等待时间(10秒)运行更长时间(10秒),一个运行时间少于指定的时间(3秒)等待的时间.指定的时间是5秒.我使用的代码如下:

Task<int>[] tasks = new Task<int>[]
{
    Task.Factory.StartNew<int>(()=>
        {
            Thread.Sleep(10000);
            return 1;
        }),
    Task.Factory.StartNew<int>(()=>
        {
            Thread.Sleep(3000);
            return 2;
        })
};

TimeSpan timeSpan = new TimeSpan(0, 0, 5);
Task.WaitAll(tasks,timeSpan);

int[] results = new int[tasks.Length];
for(int i = 0; i < tasks.Length;i++)
{
    Console.WriteLine(tasks[i].Result);
}
Run Code Online (Sandbox Code Playgroud)

至于timeSpan,我也尝试直接传入5000而不是timeSpan变量,但它不起作用.我得到以下输出:

1
2
Run Code Online (Sandbox Code Playgroud)

我希望只得到以下输出,因为另一个线程的执行时间超过了预期的等待时间.

1
Run Code Online (Sandbox Code Playgroud)

我误解了这个,还是做错了?

c# parallel-processing multithreading task-parallel-library

4
推荐指数
1
解决办法
4695
查看次数