使用Linq选择List <object>并将其强制转换为List <string>

时间:2016-06-29 12:56:20

标签: c# linq casting

我正在呼叫的方法接受List<string>。 我需要从列表中选择我想要的东西

listviewItems.Select(x => x.Tag).ToList()

但由于标签本身是一个对象,因此结果为List<object>,因此不起作用。 我也试过了

listviewItems.Select(x => (string) x.Tag).ToList()

(List<string>) listviewItems.Select(x => x.Tag).ToList()

listviewItems.Select(x => (List<string>) x.Tag).ToList()

但这些都不会返回List<string>。 投这个的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

这确实会返回package com.geekybrackets.virtualtourguide; import android.content.Context; import android.content.Intent; import android.support.v4.app.FragmentActivity; import android.os.Bundle; import android.util.Log; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import java.io.DataOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.WeakHashMap; public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { public GoogleMap mMap; double lat = 0; double lon = 0; static final int GET_DETAILS = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { public void onMapClick(LatLng latLng) { lat = latLng.latitude; lon = latLng.longitude; startActivityForResult(new Intent(MapsActivity.this,newMarker.class), GET_DETAILS); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == GET_DETAILS) { if (resultCode == RESULT_OK) { String marker_title=data.getStringExtra("title"); Marker m = mMap.addMarker(new MarkerOptions() .position(new LatLng(lat, lon)) .title(marker_title)); mMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(lat, lon))); } } } } 。您的代码中的其他地方存在问题。

{{1}}

答案 1 :(得分:1)

您只需要在对象上调用.ToString()。但是,这取决于您是否从数据库中调用。

在内存选项中:

listviewItems.Select(x => x.Tag?.ToString() ?? "").ToList()

来自实体框架:

listviewItems.Select(x => x.Tag)
             .ToList() // Get them in memory first as the ToString doesn't convert to SQL.
             .Select(tag => tag.ToString()) // Then convert to string
             .ToList();

答案 2 :(得分:1)

如果您已有List<string> strings = objects.ConvertAll(obj => obj?.ToString()); ,则可以使用List.ConvertAll

List<string> strings = listviewItems.Select(x => x.Tag?.ToString()).ToList();

如果你要构建它,你应该首先将对象转换为字符串:

google.load("elements", "1", {
    packages: "keyboard"
});
function onLoad() {
    console.log(lang);
    var kbd = new google.elements.keyboard.Keyboard(
        [google.elements.keyboard.LayoutCode.GERMAN],
        ['input1']);
}
google.setOnLoadCallback(onLoad);