C#将秒表存储在数组对象中并处理它

时间:2014-07-04 23:40:30

标签: c# arrays stopwatch

我有一个对象数组,其中我存储了不同的值类型。 其中一种是秒表。我怎么处理它? 我应该将数组元素转换为能够将其作为秒表处理?

以下是我的代码如何显示的小型复制品

public static object[] test()
    {
        object[] obj = new object[6];

        obj[0] = bool;
        obj[1] = string;
        obj[2] = double;
        obj[3] = float;
        obj[4] = int;
        obj[5] = System.Diagnostics.Stopwatch.StartNew();

        return obj;
    }

    object[] testobject = new object[6];
    testobject = test();
    Console.WriteLine(testobject[5].Elapsed.TotalMilliseconds);   //handle stopwatch

5 个答案:

答案 0 :(得分:4)

也许你应该为此写下一个课程?

public class MyObject
{
    public bool SomeBool {get; set;}
    public string SomeString {get; set;}
    public double SomeDouble {get; set;}
    public float SomeFloat {get; set;}
    public int SomeInt {get; set;}
    public System.Diagnostics.Stopwatch Stopwatch {get; set;}

    public MyObject()
    {
        this.Stopwatch = System.Diagnostics.Stopwatch.StartNew();
    }
}

然后要使用此类,您只需要调用Stopwatch属性:

var myObject = new MyObject();
Console.WriteLine(myObject.Stopwatch.Elapsed.TotalMilliseconds);

现在,如果你真的想知道在几毫秒内实例化一个数组需要多长时间,你有两个选择:

  • 使用dotTrace
  • 等效果概要分析工具
  • 在数组创建代码
  • 之外实例化

像这样:

var stopWatch = System.Diagnostics.Stopwatch.StartNew();
//create your array here
Console.WriteLine(stopWatch.Elapsed.TotalMilliseconds);

无论哪种方式,最好先找出你想要完成的事情。

答案 1 :(得分:1)

你会cast它。

如果演员表无效,此演员表将抛出InvalidCastException - 如果该对象实际上不是秒表:

var stopwatch = (Stopwatch)testobject[5];

如果它不是秒表,as operato r会给你一个null:

var stopwatch = testobject[5] as Stopwatch;

顺便说一句,您上面显示的数据结构闻起来很糟糕。如果没有这样的话,真的没有必要 - " typesafe"。您应该依赖于您的代码来准确地提供您所需的代码,而不是在运行时强制转换。因为如果你做错了 - 如果你尝试var x = (Stopwatch)object[4]之类的东西 - 那么编译器就不会抓住它,你会得到愤怒的客户报告运行时崩溃。

通常,更喜欢将对象实例存储为实际类型,而不是原始object

答案 2 :(得分:1)

您有一个object数组,因此您必须强制转换每个元素以访问其特定于类型的属性和方法:

Console.WriteLine(((Stopwatch)testobject[5]).Elapsed.TotalMilliseconds);

另一方面,绕过object数组通常不是一个好主意。您丢失了类型信息,因此,如果您将其中一个元素更改为其他类型,则现在需要更新执行该元素转换的代码。首选创建自己的类型以保存所有数据。

答案 3 :(得分:1)

我不完全确定我理解您遇到了什么问题,但假设它基于将Stopwatch元素放入{{1这个代码应该适合你:

object

此代码假定您知道元素5将始终为object[] testobject = test(); System.Diagnostics.Stopwatch stopwatch = (System.Diagnostics.Stopwatch) testobject[5]; Console.WriteLine(stopwatch.Elapsed.TotalMilliseconds); :如果不是,则会出现运行时错误。

答案 4 :(得分:1)

在投射前检查对象的类型

if (obj[5] is System.Diagnostics.Stopwatch) {
    Console.WriteLine(((System.Diagnostics.StopWatch)obj[5]).Elapsed.TotalMilliseconds);
}

或检查演员表是否有效

var sw = obj[5] as System.Diaogstics.Stopwatch;
if (sw != null) {
    Console.WriteLine(sw.Elapsed.TotalMilliseconds);
}